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中有内容。