我目前正在使用来自Web服务的内容动态地构建出带有复选框的行列表。然而,这ListView
将需要做几乎PreferenceActivity
会完成。动态创建CheckBoxPreferences
由于内容是动态的,我不知道行数,因此我无法在XML中创建每个CheckBoxPreference
。我该如何着手构建一个PreferenceActivity
,它将动态显示一个CheckBoxPreference
的未知数字行?
我目前正在使用来自Web服务的内容动态地构建出带有复选框的行列表。然而,这ListView
将需要做几乎PreferenceActivity
会完成。动态创建CheckBoxPreferences
由于内容是动态的,我不知道行数,因此我无法在XML中创建每个CheckBoxPreference
。我该如何着手构建一个PreferenceActivity
,它将动态显示一个CheckBoxPreference
的未知数字行?
您需要一个ListView
那个,一个PreferenceActivity
。正如在this link中讨论的那样,PreferenceActivity
应该仅用于实际保存偏好。
相反,你既可以创建一个简单的对话框,其中一个或多个选择的选项: http://developer.android.com/guide/topics/ui/dialogs.html
或者使用ListView
作为API的例子谷歌提供,他们举一个简单的例子:
http://hi-android.info/docs/resources/samples/ApiDemos/src/com/example/android/apis/view/List10.html
我认为您正在寻找类似的东西:
public class MyPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.my_preference_activity);
//fetch the item where you wish to insert the CheckBoxPreference, in this case a PreferenceCategory with key "targetCategory"
PreferenceCategory targetCategory = (PreferenceCategory)findPreference("targetCategory");
//create one check box for each setting you need
CheckBoxPreference checkBoxPreference = new CheckBoxPreference(this);
//make sure each key is unique
checkBoxPreference.setKey("keyName");
checkBoxPreference.setChecked(true);
targetCategory.addPreference(checkBoxPreference);
}
}
:checkBoxPreference.setTitle(“my title”); – Ranjit 2014-03-31 09:36:22
@Jodes实际上,你们两个都是对的,但正确的做法是使用ListPreference
。
我会使用完整的程序化方法,根据我的经验,它更容易一致;无论是通过代码创建一个完整的XML布局,或通过XML,但混合2可奇怪的,你不能改变一切通过XML设置...
onCreate(){
this.setPreferenceScreen(createPreferenceHierarchy());
}
public PreferenceScreen createPreferenceHierarchy(){
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
// category 1 created programmatically
PreferenceCategory cat1 = new PreferenceCategory(this);
cat1.setTitle("title");
root.addPreference(cat1);
ListPreference list1 = new ListPreference(this);
list1.setTitle(getResources().getString(R.string.some_string_title));
list1.setSummary(getResources().getString(R.string.some_string_text));
list1.setDialogTitle(getResources().getString(R.string.some_string_pick_title));
list1.setKey("your_key");
CharSequence[] entries = calendars.getCalenders(); //or anything else that returns the right data
list1.setEntries(entries);
int length = entries.length;
CharSequence[] values = new CharSequence[length];
for (int i=0; i<length; i++){
CharSequence val = ""+i+1+"";
values[i] = val;
}
list1.setEntryValues(values);
cat1.addPreference(list1);
return root;
}//end method
但是,使用这种方法,你将运行到平台的局限性没有多个选择ListPreference
,你可能会想要实现别的东西。
我找到了this解决方案,这很好。你必须阅读评论找到有关如何调试尽管代码线索......
这是要走的路。 – 2013-07-18 15:07:49
你刚刚完成了我的整个一天。清楚的答案,并显示更多与PreferenceCategory与一个列表。谢谢! – Shadoath 2016-01-23 18:22:28
使用PreferenceFragmentCompat从偏好COMPAT图书馆
编译“com.android.support:preference-v7:23.4.0 '
查看此文的实施细节https://medium.com/@arasthel92/dynamically-creating-preferences-on-android-ecc56e4f0789#.71ssvjses
感谢您的快速响应。此列表是为了保存偏好。此列表中的项目是应用内容的过滤器设置,这些过滤器是从Web服务中提取的。别介意这个应用程序的工作原理,我只需要知道如何在每行中用CheckBoxPreferences以编程方式正确构建动态PreferenceActivity。这听起来像只使用我知道的ListView,但如果可以使用首选项来完成,它会为我节省一段时间,因为那就是它需要的功能。标题为 – askilondz 2011-06-08 03:06:34