再谈谈ListView

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ScrollView中加入ListView会导致ListView无法滑动,因为ScrollView会拦截ListView的滑动事件。可以考虑不使用ScrollView,直接使用ListView,并将需要放入ScrollView中的内容作为HeaderView或FooterView添加到ListView中。如果非要使用ScrollView,可以将ListView的高度设置为固定值,让ScrollView不拦截ListView的滑动事件。具体实现方式如下: 1. 在布局文件中,先定义一个ScrollView,然后在ScrollView中再定义一个ListView,并将ListView的高度设置为固定值,例如: ```xml <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 这里定义一个ListView,并将其高度设置为固定值 --> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="500dp" /> </ScrollView> ``` 2. 在代码中,先获取ListView的高度,然后将其设置为固定值,如下: ```java ListView listView = findViewById(R.id.list_view); int listViewHeight = listView.getLayoutParams().height; listView.getLayoutParams().height = 500; listView.requestLayout(); ``` 这样就可以在ScrollView中加入ListView了。但是需要注意的是,这种做法可能会导致ListView的部分内容无法显示出来,因为ListView的高度被设置为了固定值。如果ListView的高度不够,可以在ScrollView中再添加一个布局容器,将其作为ListView的FooterView,这样就可以显示完整的ListView内容了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值