Как я могу реализовать опцию "Выбрать все" для предпочтения списка с несколькими вариантами выбора?
Я хочу знать, есть ли какой-нибудь способ, чтобы иметь возможность выбрать / поставить галочку во всех полях предпочтения списка множественного выбора с помощью кода.
Это мой файл 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>
Теперь первым пунктом моего списка будет "Все команды". Я хочу сделать так, чтобы в тот момент, когда пользователь выбирает "Все команды", рядом с ними должна стоять галочка.
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
}
}
});