日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 能自动选择的listview,Android ListView多选模式

發(fā)布時間:2024/9/19 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 能自动选择的listview,Android ListView多选模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ListView使用多選模式好處

交互與數(shù)據(jù)分離,在多選狀態(tài)下不需要修改數(shù)據(jù)源,在最后確定的時候獲取選擇索引來確定選擇的數(shù)據(jù)。

ListView模式

CHOICE_MODE_NONE:普通模式;

CHOICE_MODE_SINGLE:單選模式;

CHOICE_MODE_MULTIPLE:多選模式;

CHOICE_MODE_MULTIPLE_MODAL:多選模式(與ActionMode配合使用)。

CHOICE_MODE_MULTIPLE 與 CHOICE_MODE_MULTIPLE_MODAL 區(qū)別:

前者能夠同時響應(yīng)ListView Item點擊事件,與Item選擇事件;

后者在未進入ActionMode模式下響應(yīng)Item點擊事件,不響應(yīng)Item選擇事件。在進入ActionMode模式后不響應(yīng)Item點擊事件,響應(yīng)Item選擇事件。

同時后者如果Item長按能夠自動進入到ActionMode模式(也可以使用 ListView.setItemChecked(0,true)來選擇一項Item進入ActionMode模式),當(dāng)所有Item全部取消選擇后,自動退出ActionMode模式。

CHOICE_MODE_MULTIPLE_MODAL使用方式:

listView = (ListView) findViewById(R.id.list_view);

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

listView.setMultiChoiceModeListener(new ListView.MultiChoiceModeListener());

設(shè)置方式

XML布局文件設(shè)置(多選模式設(shè)置):

android:layout_width="match_parent"

android:layout_height="match_parent"

android:choiceMode="multipleChoice"/>

代碼設(shè)置:

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

選擇

ListView多選狀態(tài)是記錄到ListView控件中,由其父類AbsListView實現(xiàn)。

列表Item最外層需要實現(xiàn)Checkable接口,比如CheckBox、CheckedTextView等控件。

如果需要使用容器類控件比如LinearLayout,可以重寫控件,實現(xiàn)Checkable接口。

比如:

public class CheckableLinearLayout extends LinearLayout implements Checkable {

private boolean mChecked = false;

public CheckableLinearLayout(Context context) {

super(context);

}

public CheckableLinearLayout(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

}

public CheckableLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

public void toggle() {

setChecked(!mChecked);

}

@Override

public boolean isChecked() {

return mChecked;

}

@Override

public void setChecked(boolean checked) {

if (mChecked != checked) {

mChecked = checked;

refreshDrawableState();

for (int i = 0, len = getChildCount(); i < len; i++) {

View child = getChildAt(i);

if(child instanceof Checkable){

((Checkable) child).setChecked(checked);

}

}

}

}

}

獲取選擇數(shù)據(jù)

獲取到最終選擇結(jié)果為選中項索引集合,是一個SparseBooleanArray,記錄了操作過的item選擇狀態(tài)(如果選中item再取消同樣會記錄,狀態(tài)為false)。

SparseBooleanArray checkedItemPositions = listView.getCheckedItemPositions();

API

// 清除選中

public void clearChoices();

// 根據(jù)索引判斷是否選中

public boolean isItemChecked(int position);

// 獲取選中數(shù)量

public int getCheckedItemCount();

// 根據(jù)索引設(shè)置選中狀態(tài)

public void setItemChecked(int position, boolean value);

注意

如果ListView Item內(nèi)有按鈕會搶Item點擊事件,解決方法為在Item根布局增加

android:descendantFocusability="blocksDescendants"

ActionMode監(jiān)聽回調(diào)有兩種ActionMode.Callback和MultiChoiceModeListener,后者繼承自前者,并新增一個item選擇與取消選擇的回調(diào)方法,但是此方法只在CHOICE_MODE_MULTIPLE_MODAL模式下有效,所以MultiChoiceModeListener監(jiān)聽只適用于CHOICE_MODE_MULTIPLE_MODAL模式。

ListView如果使用CHOICE_MODE_MULTIPLE_MODAL模式,可以自動進入ActionMode模式,使用setMultiChoiceModeListener(MultiChoiceModeListener listener)設(shè)置監(jiān)聽回調(diào)。

總結(jié)

以上是生活随笔為你收集整理的android 能自动选择的listview,Android ListView多选模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。