【问题标题】:How can I implement a 'Select all' option for Multi Select List Preference?如何为多选列表首选项实现“全选”选项?
【发布时间】:2014-06-10 01:25:42
【问题描述】:

我想知道是否有任何方法可以通过代码选择/选中多选列表首选项的所有框。

这是我的偏好设置的 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>

现在,我的列表中的第一项将是“所有团队”,我希望在用户选择“所有团队”的那一刻,所有团队名称旁边都应该有一个勾号。

【问题讨论】:

    标签: android sharedpreferences multiselectlistpreference


    【解决方案1】:

    这是我使用的,(注意,您需要将 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
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多