ScrollView +   Listview 实现方案优选

一,按

在开发中,最近常遇到这个UI的结构,遇到了不少问题,如下:

1, listview的高度不对

2, 页面闪动,不在最开始的位置

3, 如果listview的item需要改变高度,listview的高度不能正常更新

二,解决方案一:动态计算listview高度

1, 具体函数请百度之,原理就是item高度加上divider高度

2, 局限:

2-1 使用麻烦,需要listview可能改变的地方调用

2-2 页面在部分机型上,仍然存在闪动的问题

3, 参考代码如下:

public void setListViewHeightBasedOnChildren(ListView listView) {    
         ListAdapter listAdapter = listView.getAdapter();    
         if (listAdapter == null) {  
             // pre-condition    
             return;    
         }    
  
         int totalHeight =0;  
         for (int i = 0; i < listAdapter.getCount(); i++) {    
             View listItem = listAdapter.getView(i, null, listView);    
             listItem.measure(0, 0);   
             totalHeight += listItem.getMeasuredHeight();    
         }    
  
         System.out.println("aaa==="+totalHeight);  
         ViewGroup.LayoutParams params = listView.getLayoutParams();    
         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));    
         listView.setLayoutParams(params);    
    }

三,解决方案二:使用自定义Listview

1, 使用自定义ListView,修改onMeasure()方法即可

参考代码如下:

public class InScrollListView extends ListView{

	public InScrollListView(Context context) {
		super(context);
	}

	public InScrollListView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpec);
	}
}

2, 局限:

2-1 页面在部分机型上,仍然存在闪动的问题

2-2 如果有点击事件需要修改item的高度,则需要wapper一层,具体实现方式就是将item是否是展开的状态,包在数据结构中。点击事件之后,update data,然后再notify adapter

四,解决方案三:利用Listview的Header (推荐方案)

1, 拆解页面view,采用addHeader(View v)的方法将view加到listview中去。

2, 局限:

2-1 相对麻烦一些,但是实现效果是最好的。另外一个优点是,魅族机器上,scrollview滑动会有很奇怪的问题,换成Listview之后,也不存在这个问题。

时间: 2024-10-27 07:56:28

ScrollView +   Listview 实现方案优选的相关文章

ScrollView+ListView滚动冲突,没有滑动效果 解决办法

问题背景 今天做个界面需要在整个布局都要滚动的基础上添加一个ListView元素,整个布局滚动当然用ScrollView.但是在ScrollView+ListView的布局画好后,发现整个界面都无法滚动,而且ListView只显示了第一条元素. 查看布局提示:The vertically scrolling ScrollView should not contain another vertically scrolling widget (ListView). 问题分析: 由上面那个提示可以看到

当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?

有时我们需要将ViewPager嵌套在其他已经含有手势动作的ViewGroup里,如ScrollView,ListView时,会造成手势冲突,如表现为ViewPager向左划时,不小心向上移动了一点距离,ViewPager立刻回弹到原始位置. 主要问题出在ScrollView/ListView作为ViewPager的ParentView,会先接受到触摸信息,而且他们对上下滑动是会做出拦截动作,并接管触摸信息的向下传递,导致ViewPager滑动异常. 先看一种解决方式: public class

Cocostudio学习笔记(6) ScrollView+ ListView+ PageView

这篇记录了三个控件的使用流程:ScrollView和 ListView.PageView. ---------------------------------------------------------------------------------------------------------------------------- ScrollView --------------------------------------------------------------------

Android长截屏-- ScrollView,ListView及RecyclerView截屏

http://blog.csdn.net/wbwjx/article/details/46674157       Android长截屏-- ScrollView,ListView及RecyclerView截屏 https://github.com/BoBoMEe/AndroidDev/blob/master/common/common/src/main/java/com/bobomee/android/common/util/ScreenUtil.java /* * Copyright (C)

ScrollView listView gridView 之间的冲突问题

在ScrollView中的listView gridView添加适配器之后添加//设置gridView整体的高度 public void setListViewHeightBasedOnChildren(GridView gridView) { // 获取ListView对应的Adapter if(adapter== null) { return; } int totalHeight = 0; for(int i = 0, len = adapter.getCount(); i < len; i

竖向ScrollView+横向ScrollView+ListView,实现listView可以左右上下滑动

竖向ScrollView中嵌套横向ScrollView,横向ScrollView嵌套ListView. 具体代码见附件. <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_he

ScrollView&amp;ListView

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="o

Android 自定义ScrollView ListView 体验各种纵向滑动的需求

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38950509,本文出自[张鸿洋的博客] 1.概述 群里的一个哥们有个需求是这样的:问题:主要功能就是:1.循环的一个滑动:2.每次滑动结束,保持每个Item的完整.然后我当时给他写了个Demo,所有代码都在Activity里面,后期看来其太恶心了,修改也不方便:貌似那哥们还因为那代码修改到12点,大大的赞一下这哥们的毅力,也深表歉意,今天特意把代码抽取成自定义的ScrollVi

android scrollview listview显示不全

原来处理方法是重写ListView import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ListView; public class MyListView extends ListView { public MyListView(Context context) { super(context); // TO