【Android】ListView多选模式的使用
来源:互联网 发布:类似知否的小说 编辑:程序博客网 时间:2024/06/09 22:57
【关键词】
ListView
多选
【问题】
- 如何使用ListView的多选模式?
【效果图】
【分析】
- 长按某一个 item 的时候,开启多选模式,并让当前选择的 item 处于选中状态;
- 利用ListView 的 Choice属性,可以很方便使用多选模式或单项模式;
【解决方案】
使用方法
长按 item 开启多选模式
final ListView lvMain = (ListView) view.findViewById(R.id.lv_main);
// 长按开启多选模式;
lvMain.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
if (adapterView instanceof AbsListView) {
// 当前处于None时才震动(避免多次调用),并开启多选模式;
if (((AbsListView) adapterView).getChoiceMode() == AbsListView.CHOICE_MODE_NONE) {
//注意: 震动需要权限;
Vibrator vibrator = (Vibrator) mContext.getSystemService(Service.VIBRATOR_SERVICE);
vibrator.vibrate(100);
enableMultipleChoice(true);
// 设置当前长按项被选中;
mLouAdapter.getBindListView().setItemChecked(i, true);
return true;
}
}
return false;
}
});
private void enableMultipleChoice(boolean enable) {
if (enable) {
mLouAdapter.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
} else {
mLouAdapter.clearChoice();
}
}
关闭多选模式
enableMultipleChoice(false);
【代码】
结合上一节的【Android】通用Adapter,在[LouAdapter.java]中添加以下代码
// -------- 添加 choice调用(2016.03.25)
public void clearChoice() {
mListView.clearChoices();
updateChange(); // 此句是必须的,否则界面无法更新;
mListView.post(new Runnable() {
@Override
public void run() {
// 注意需要使用Runnable才能生效;
// 参考资料[ListView selection remains persistent after exiting choice mode] (http://stackoverflow.com/questions/9754170/listview-selection-remains-persistent-after-exiting-choice-mode)
mListView.setChoiceMode(AbsListView.CHOICE_MODE_NONE);
}
});
}
public void setChoiceMode(int mode) {
mListView.setChoiceMode(mode);
}
public int getChoiceMode() {
return mListView.getChoiceMode();
}
public void deleteChoicedItem() {
if (mListView.getChoiceMode() != AbsListView.CHOICE_MODE_NONE) {
// 获取被选中的ITEM;
SparseBooleanArray sparseBooleanArray = mListView.getCheckedItemPositions();
ArrayList<T> deleteLists = new ArrayList<T>();
for (int i = 0; i < sparseBooleanArray.size(); i++) {
if(sparseBooleanArray.valueAt(i)){
deleteLists.add(mLists.get(sparseBooleanArray.keyAt(i)));
}
}
mLists.removeAll(deleteLists);
mListView.clearChoices();
updateChange();
}
}
// ~~~~~~~~~~~~
使用过程中需要注意,需要在 ListView的item_layout的根布局中添加背景(否则,不能看到选中状态)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="88dp"
android:paddingBottom="4dp"
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:background="@drawable/lv_item_selector"
android:paddingTop="8dp">
[lv_item_selector.xml]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/lv_item_state_activated_pressed" android:state_activated="true" android:state_pressed="true"/>
<item android:drawable="@color/lv_item_state_activated" android:state_activated="true"/>
<item android:drawable="@color/lv_item_state_pressed" android:state_pressed="true"/>
<item android:drawable="@color/lv_item_state_normal"/>
</selector>
[colors.xml]
<color name="lv_item_state_activated">#994455</color>
<color name="lv_item_state_activated_pressed">#d72e50</color>
<color name="lv_item_state_pressed">#88eec99d</color>
<color name="lv_item_state_normal">#e29944</color>
【参考资料】
1 0
- 【Android】ListView多选模式的使用
- ListView的单选和多选模式的使用
- ListView 的多选模式
- ListView的多选模式
- Android MVP模式 ListView中嵌入checkBox的使用
- Android listview多选模式ChoiceMode
- android ListView的使用
- Android ListView的使用
- Android ListView的使用
- android - ListView的使用。
- android - ListView的使用
- Android ListView的使用
- android listView的使用
- Android Listview的使用
- android - ListView的使用。
- Android,ListView的使用
- Android ListView的使用
- Android ListView的使用
- c#单例模式3中写法
- 【PA2014】【BZOJ3716】Muzeum
- 【BZOJ3651】网络通信
- 【CERC2014】【BZOJ4043】Vocabulary
- snprintf类型不匹配导致的core dump问题分析与定位
- 【Android】ListView多选模式的使用
- 天声人語 20160326 津軽海峡の新幹線
- 关于同步线程安全问题
- 读书笔记——鸟哥(02)首次登入
- shell 之 read
- WebSphere Message Broker介绍
- 【Java】基本类型和引用类型(值传递)
- go语言闭包如何捕获参数
- 那一夜, 我懂了视频帧