Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态创建CheckBoxPreferences_Android_Dynamic_Preferenceactivity_Checkboxpreference - Fatal编程技术网

Android 动态创建CheckBoxPreferences

Android 动态创建CheckBoxPreferences,android,dynamic,preferenceactivity,checkboxpreference,Android,Dynamic,Preferenceactivity,Checkboxpreference,我目前正在使用web服务中的内容动态地构建一个带有复选框的行列表。然而,这个ListView将需要完成PreferenceActivity所要完成的工作 我不知道行数,因为内容是动态的,所以我无法在XML中创建每个CheckBoxPreference。我如何构建一个首选项活动,它将动态显示带有复选框首选项的未知数字行?为此,您需要一个列表视图,一个首选项活动。如中所述,PreferenceActivity应仅用于实际保存首选项 相反,您可以创建一个带有单选或多选选项的简单对话框: 或者使用Li

我目前正在使用web服务中的内容动态地构建一个带有复选框的行列表。然而,这个
ListView
将需要完成
PreferenceActivity
所要完成的工作


我不知道行数,因为内容是动态的,所以我无法在XML中创建每个
CheckBoxPreference
。我如何构建一个
首选项活动
,它将动态显示带有
复选框首选项的未知数字行?

为此,您需要一个
列表视图
,一个
首选项活动
。如中所述,
PreferenceActivity
应仅用于实际保存首选项

相反,您可以创建一个带有单选或多选选项的简单对话框:

或者使用
ListView
,就像谷歌提供的API示例一样,他们给出了一个简单的示例:


我想你在寻找这样的东西:

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,实际上你们两个都是对的,但正确的方法是使用

我会使用一个完整的编程方法,从我的经验来看,更容易保持一致;或者通过代码创建一个完整的XML布局,或者通过XML创建一个完整的XML布局,但是混合使用这两种布局可能会很奇怪,并且您无法通过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
onCreate(){
这个.setPreferenceScreen(createPreferenceHierarchy());
}
公共首选项屏幕createPreferenceHierarchy(){
PreferenceScreen root=getPreferenceManager().createPreferenceScreen(此);
//类别1以编程方式创建
PreferenceCategory cat1=新的PreferenceCategory(本);
第1类:设定所有权(“所有权”);
根。addPreference(cat1);
ListPreference list1=新的ListPreference(此);
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));
列表1.设置键(“您的_键”);
CharSequence[]entries=calendars.GetCalendars();//或返回正确数据的任何其他内容
列表1.设置条目(条目);
int length=entries.length;
CharSequence[]值=新的CharSequence[length];

对于(int i=0;i使用Preference Compat库中的Preference FragmentCompat

编译'com.android.support:preference-v7:23.4.0'


查看本文以了解实施细节

感谢您的快速响应。此列表用于保存首选项。此列表中的项目是应用程序内容的筛选器设置,这些筛选器是从web服务中提取的。不管此应用程序如何工作,我只需要知道如何正确构建动态预处理ReferenceActivity以编程方式在每一行中使用CheckBoxPreferences。这听起来像是在使用我知道的ListView,但如果可以使用preferences来完成,这将节省我大量的时间,因为这正是它需要的功能。这就是方法。你刚刚让我度过了一整天。清楚答案,并通过使用Pref显示了更多带有列表的erenceCategory。谢谢!标题:checkBoxPreference.setTitle(“我的标题”);