我目前正在使用 Web 服务中的内容动态构建带有复选框的行列表。但是,这ListView
将需要完成 aPreferenceActivity
将完成的工作。
我不知道行数,因为内容是动态的,所以我不能CheckBoxPreference
在 XML 中创建每一行。我该如何构建PreferenceActivity
一个动态显示未知数行的CheckBoxPreference
?
我目前正在使用 Web 服务中的内容动态构建带有复选框的行列表。但是,这ListView
将需要完成 aPreferenceActivity
将完成的工作。
我不知道行数,因为内容是动态的,所以我不能CheckBoxPreference
在 XML 中创建每一行。我该如何构建PreferenceActivity
一个动态显示未知数行的CheckBoxPreference
?
我想你正在寻找这样的东西:
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);
}
}
好吧@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
,并且您可能想要实现其他东西。
我找到了这个解决方案,效果很好。您必须阅读评论才能找到有关如何调试代码的线索...
ListView
为此,您需要一个PreferenceActivity
. 正如此链接中所讨论的,PreferenceActivity
仅应用于实际保存首选项。
相反,您可以创建一个带有单选或多选选项的简单对话框:http: //developer.android.com/guide/topics/ui/dialogs.html
或者使用ListView
Google 提供的 API 示例中的 a,他们给出了一个简单的示例:
http://hi-android.info/docs/resources/samples/ApiDemos/src/com/example/android/apis/view/List10.html
使用 Preference Compat 库中的 PreferenceFragmentCompat
编译'com.android.support:preference-v7:23.4.0'
查看这篇文章的实现细节https://medium.com/@arasthel92/dynamically-creating-preferences-on-android-ecc56e4f0789#.71ssvjses