6

コードを使用して複数選択リスト設定のすべてのボックスを選択/チェックできる方法があるかどうかを知りたいです。

これは、設定用の XML ファイルです。

<MultiSelectListPreference
    android:entries="@array/list"
    android:entryValues="@array/lValues"
    android:key="list"
    android:summary="This is a list to choose from"
    android:title="Teams to Follow" />

</PreferenceScreen>

そして、これらは配列です:

<string-array name="list">
    <item>All Teams</item>
    <item>Team1</item>
    <item>Team2</item>
    <item>Team3</item>
    <item>Team4</item>
</string-array>
<string-array name="lValues">
    <item>All</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
</string-array>

これで、リストの最初の項目は「すべてのチーム」になります。ユーザーがすべてのチームを選択した瞬間に、すべてのチーム名の横にチェックが付くようにしたいと思います。

すべてのボックスをチェックする必要があります

4

1 に答える 1

0

これが私が使用したものです(nb。リソースからアレイを作成した場所に変更する必要があります)adapter.getCount()array.length

// create the dialog
final AlertDialog dialog = new AlertDialog.Builder(getActivity());
// set handlers for button presses etc.

// ....

// Set the click listener specifically for the 0th element
final ListView lv = dialog.getListView();
lv.setItemsCanFocus(true);
lv.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long viewid) {
        System.out.println("clicked" + position);
        CheckedTextView textView = (CheckedTextView) view;
        if(position == 0) {
             if(textView.isChecked()) {
                 SparseBooleanArray checkedPositions = lv.getCheckedItemPositions();
                 for (int i = 1; i < adapter.getCount(); i++) {
                    if(!checkedPositions.get(i)) {
                        lv.setItemChecked(i, true);
                    }
                 }
             } else {
                 for(int i = 1; i < adapter.getCount(); i++) {
                     lv.setItemChecked(i, false);
                 }
             }
        } else {
           // handle clicks for non-top element
        }
    }
});
于 2014-09-29T08:20:51.547 に答える