2011-06-07 86 views
12

我目前正在使用来自Web服务的内容动态地构建出带有复选框的行列表。然而,这ListView将需要做几乎PreferenceActivity会完成。动态创建CheckBoxPreferences

由于内容是动态的,我不知道行数,因此我无法在XML中创建每个CheckBoxPreference。我该如何着手构建一个PreferenceActivity,它将动态显示一个CheckBoxPreference的未知数字行?

回答

0

您需要一个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

+1

感谢您的快速响应。此列表是为了保存偏好。此列表中的项目是应用内容的过滤器设置,这些过滤器是从Web服务中提取的。别介意这个应用程序的工作原理,我只需要知道如何在每行中用CheckBoxPreferences以编程方式正确构建动态PreferenceActivity。这听起来像只使用我知道的ListView,但如果可以使用首选项来完成,它会为我节省一段时间,因为那就是它需要的功能。标题为 – askilondz 2011-06-08 03:06:34

27

我认为您正在寻找类似的东西:

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); 
    } 
} 
+0

:checkBoxPreference.setTitle(“my title”); – Ranjit 2014-03-31 09:36:22

7

@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解决方案,这很好。你必须阅读评论找到有关如何调试尽管代码线索......

+2

这是要走的路。 – 2013-07-18 15:07:49

+1

你刚刚完成了我的整个一天。清楚的答案,并显示更多与PreferenceCategory与一个列表。谢谢! – Shadoath 2016-01-23 18:22:28