Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ListView焦點事件沖突問題與解決

Android ListView焦點事件沖突問題與解決

編輯:關於Android編程

Android ListView對於單純列表展示是很好用的,但是一旦牽扯到對listView進行操作就會遇到各種各樣的問題。比如保存Checkbox狀態與item復用的沖突、遇到可獲取焦點的控件比如說button、edxttext等與listView本身的點擊事件沖突等。對於後者,這裡不研究原因,只提供解決方案。


如果listView之中只有button這樣會搶奪焦點的控件,最好的建議是直接把button換成Textview,直接規避焦點問題。


如果有些產品經理要求在listview的item中提供復雜操作,比如輸入、單選復選等,這裡提供一個簡單的同時響應按鈕控件,並且響應listView的onItemClick事件的解決方法:為整個ListItem添加OnTouch事件,在事件中將所有可能搶奪焦點的控件設置為不可獲取焦點。這樣就可以保證liistView響應OnItemClick事件,再對每個可能獲取焦點的控件設置OnTouch事件,在之中將其設置為可獲取焦點,注意對Button等在手指離開的時候要將其失去焦點。


具體代碼如下


	@Override
	public boolean onTouch(View view, MotionEvent motionEvent) {
		if (view instanceof EditText) {
			 //EditText設置為可焦點
	         EditText editText = (EditText) view;
	         editText.setFocusable(true);
	         editText.setFocusableInTouchMode(true);
		}  else if(view instanceof Button || view instanceof RadioButton ) {
			//設置為可焦點,手指抬起時設為不可焦點
			if(motionEvent.getAction() == MotionEvent.ACTION_UP){
				view.setFocusable(false);
				view.setFocusableInTouchMode(false);
			}else{
				view.setFocusable(true);
				view.setFocusableInTouchMode(true);
			}
		}else {
			ViewHolder holder = (ViewHolder) view.getTag();
			//將所有有可能獲取焦點的控件的setFocusable和setFocusableInTouchMode方法設為false
			setEditTextFoucsableFalse(holder);
		}
		return false;
	}

注:如果存在EditText,為了保證輸入法正常彈出,需要設置android:windowSoftInputMode="adjustPan"

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved