12

現在、Web サービスのコンテンツを使用して動的にチェックボックスを含む行のリストを構築しています。ただし、これは が達成ListViewすることのほとんどを行う必要がありますPreferenceActivity

コンテンツが動的であるため、行数がわからないためCheckBoxPreference、XML でそれぞれを作成することはできません。動的にPreferenceActivity不明な数の行を表示する を構築するにはどうすればよいですか?CheckBoxPreference

4

4 に答える 4

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);
    }
}
于 2011-07-02T00:09:16.940 に答える
8

@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、おそらく何か他のものを実装したくなるでしょう。

私はこの解決策を見つけました。ただし、コードをデバッグする方法についての手がかりを見つけるには、コメントを読む必要があります...

于 2012-08-01T13:54:37.253 に答える
0

ListViewそのためにはが必要ですPreferenceActivityこのリンクで説明されているPreferenceActivityように、実際に設定を保存するためにのみ使用する必要があります。

代わりに、単一または複数の選択オプションを持つ単純なダイアログを作成できます: http://developer.android.com/guide/topics/ui/dialogs.html

または、ListViewGoogle が提供する API の例のように使用すると、簡単な例が示されます。

http://hi-android.info/docs/resources/samples/ApiDemos/src/com/example/android/apis/view/List10.html

于 2011-06-08T00:58:45.760 に答える