Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> (Android)五分鐘讓你輕松學會ListView單選和多選功能

(Android)五分鐘讓你輕松學會ListView單選和多選功能

編輯:關於Android編程

在實現ListView單選時,我們可以在

Adapter中自己創建一個selectPosition參數,

這樣是能實現需求。

但加入要是再加一個多選
接著又在Adapter中創建了一個記錄選中position的集合,也是可以實現的,但是實現起來還是相關繁瑣的。過程很不樂觀

這裡介紹一種相對簡單的實現方式。

關鍵點,利用ListView中的Choice來實現。

ListView中自帶Choice相關功能,提供單選和多選兩種Choice模式。

我們可以在布局中設置

android:choiceMode = "singleChoice"

同樣也可以在代碼中處理

lv .setChoiceMode(ListView. CHOICE_MODE_MULTIPLE);

對於api很好理解,顧名思義。我們來看一下
比如 getCheckedItemPosition()就是獲取當前選中的位置, 注意只有單選模式此方法才有意義
而多選對應的獲取方法為 getCheckedItemPositions 返回的是一個SparseBooleanArray對象
這個類型相當於map,是一個key為Integer,value為Boolean的鍵值對集合,代表激活item選中位置和狀態數據
有點需要注意的是不代表你10個item獲取到的SparseBooleanArray就一定也是size為10, 他只保存激活的item,
激活是指有過點擊操作有過checked變化的
比如你點擊了兩次第二個item,雖然最後第二個item還是未選中狀態,
但有了操作,集合中就會保存了一個 1=false 的鍵值對數據,代表第二個item當前是未選中,而其他位置的item則不保存

我們來看一下效果圖:

單選:

\

多選:

\

 

我們重點來看

在於ListView的item布局的處理
被選中的item會設置一個checked狀態, 因此這裡需要Item的根布局實現過Checkable可選中接口,自定義CheckableLinearLayout 繼承於LinearLayout

public class CheckableLinearLayout extends LinearLayout implements Checkable {

	// checked狀態
	private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

	// 是否選中
	private boolean mChecked = false;

	public CheckableLinearLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	/**
	 * 判斷是否選中
	 */
	public boolean isChecked() {
		return mChecked;
	}

	/**
	 * 設置選中狀態
	 */
	public void setChecked(boolean b) {
		if (b != mChecked) {
			mChecked = b;
			refreshDrawableState();
		}
	}

	/**
	 * 切換當前的選中狀態
	 */
	public void toggle() {
		setChecked(!mChecked);
	}

	@Override
	public int[] onCreateDrawableState(int extraSpace) {
		// 在原有狀態中添加一個空間space用於保存checked狀態
		final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
		if (isChecked()) {
			// 將checked狀態合並到原有的狀態數組中
			mergeDrawableStates(drawableState, CHECKED_STATE_SET);
		}
		return drawableState;
	}
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved