ListView這個控制項可謂是用處多多,最近使用ListView遇到了一些問題,在解決之後一來想留個記錄,二來想分享一下我的問題,在大家遇到後能夠快速解決。
功能說明:
實現多個版面的滑動顯示,同時多個版面中的ListView中Item要能夠響應點擊並跳轉至顯示詳細資料的Activity中。
痛點:
①滑動顯示時,在ListView中的滑動效果會被本身的Item點擊效果所遮蓋,從而只能在離開ListView的地方進行滑動操作,這個問題有許多中解決方案,但最簡單的就是在Activity中重寫dispatchTouchEvent()方法,如下所示:
// 重寫這個方法實現在ListView中滑動切換View
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
this.mGestureDetector.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
很簡單的解釋就是在“分發觸摸事件”處理中,先處理手勢左右滑動的事件響應,再去處理父類的事件處理響應(對於Button的處理與之相同)。
②從一組View滑動至另一組時ListView中的內容顯示不出來。我之前一直使用的是直接從ListActivity中繼承,這樣就使得我的布局檔案中對ListView控制項的id屬性只能有一種寫法:android:id="@id/android:list"。即不能給ListView控制項加上能夠在“.java”檔案中被引用的id,這樣使得滑動顯示的ListView中沒有內容。這個問題可以這樣解決:
直接繼承Activity,然後在Activity中定義ListView的對象,在xml檔案中給出ListView控制項的id,在“.java”檔案中綁定一下,其他動作與之前沒有多大區別,在最後設定監聽時要採用如下的方法:
listView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
switch((int)arg3){
case 0:
intent.putExtra("title", getString(R.string.ti_frnew01));
intent.putExtra("txt", getString(R.string.frnew01));
intent.setClass(FrontPage.this, DetailNew.class);
startActivity(intent);
break;
// 省略......
}
}
}
這樣就實現了對Item點擊的監聽,而arg3所對應的就是id。
這樣問題就解決了,既能夠在ListView或Button中實現滑動,也能使得滑動過去的版面中的ListView中有內容。