ScrollView 与ListView 滑动冲突完美解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollView 与ListView 滑动冲突完美解决相关的知识,希望对你有一定的参考价值。

一、介绍ListView高度的设置方法

二、根据实际需求解决冲突问题

 

一、介绍ListView高度的设置方法

在ScrollView中使用ListView,ListView的高度会不正常。

    方式一:在XML中写死     

android:layout_width="match_parent"
android:layout_height="120dp"

    方式二:代码中设置固定高度(如果在运行过程中才能决定ListView高度)

public void setHeight(int height){
  LayoutParams params = this.listview.getLayoutParams();  
  params.width = LayoutParams.FILL_PARENT;  
  params.height = height;  
  listview.setLayoutParams(layoutParams);
}

    方式三:代码中动态设置高度(让ListView高度最大 显示完全所有数据)

public void setHeight(){  
    int height = 0;  
    int count = adapter.getCount();  
    for(int i=0;i<count;i++){  
        View temp = adapter.getView(i,null,listview);  
        temp.measure(0,0);  
        height += temp.getMeasuredHeight();  
    }  
    LayoutParams params = this.listview.getLayoutParams();  
    params.width = LayoutParams.FILL_PARENT;  
    params.height = height;  
    listview.setLayoutParams(layoutParams);  
}

 

二、根据实际需求解决冲突问题

前提1:ListView 显示全部内容(假如4条数据 我显示满4条)

  上述方式三让ListView高度最大,显示完全数据,滑动时就只会响应ScrollView滑动事件

  此时ListView不能滑动,也没必要滑动,因为已经显示完全数据。

 

前提1:ListView 不想显示全部内容(假如100条数据 我只显示10条 滑动查看其余)

  使用上述方式一或二,ListView没有显示完全数据

  但是想焦点在ListView时滑动ListView,焦点在ScrollView时滑动ScrollView

  给ListView加上监听OnTouchListener

listView.setOnTouchListener(new View.OnTouchListener() {?    
  @Override?
  public boolean onTouch(View arg0, MotionEvent arg1) {
    scrollView.requestDisallowInterceptTouchEvent(true);?
return false;
  }
?}
);

 

以上是关于ScrollView 与ListView 滑动冲突完美解决的主要内容,如果未能解决你的问题,请参考以下文章

滑动冲突问题,触摸事件拦截处理

scrollview 和 listview滑动冲突解决

ScrollView内嵌套ListView时的显示与滑动问题

AndroidUI系列--在DecorView层解决RecyclerView和ScrollView的滑动冲突

Android -- 每日一问:如何解决ScrollView嵌套中一个ListView的滑动冲突?

Android -- 每日一问:如何解决ScrollView嵌套中一个ListView的滑动冲突?