Android 中ScrollView嵌套ListView 最简单有效的处理方法

第一次写博客,有错的地方大家可以指出;

大家都知道在ScrollView嵌套ListView,ListView会显示不完全,无法计算ListView的高度,要解决在一个滑动界面中显示ListView和其他布局,有两种方法;

第一种:就是让listView的高度全部展示出来,那么这个就要对ListView进行封装,重新设置高度;代码如下:

public class ListViewForScrollView extends ListView {   public ListViewForScrollView(Context context) {      super(context);   }

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

   public ListViewForScrollView(Context context, AttributeSet attrs,         int defStyle) {      super(context, attrs, defStyle);   }

   /**    * 重写onMeasure(),达到使ListView适应ScrollView的效果    */   @Override   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {      int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,            MeasureSpec.AT_MOST);      super.onMeasure(widthMeasureSpec, expandSpec);   }}

    其中两个输入参数:  widthMeasureSpec  水平宽度  heightMeasureSpec 垂直高度  这两个要求是按照View.MeasureSpec类来进行编码的。  参见View.MeasureSpec这个类的说明:这个类包装了从parent传递下来的布局要求,传递给这个child。  每一个MeasureSpec代表了对宽度或者高度的一个要求。  每一个MeasureSpec有一个尺寸(size)和一个模式(mode)构成。    MeasureSpec.AT_MOST 表示子布局可以根据自己的大小选择任意大小的模式    Integer.MAX_VALUE >> 2 表示值为 2的31次方-1 的常量,它表示 int 类型能够表示的最大值。

第二种方法:想要实现滑动界面中包含ListView,可以通过给ListView添加HeaderView或者FooterView来实现,代码如下:
mView = View.inflate(mContext, R.layout.fragment_base_slide_view_contact, this);
mistView = (ListView)mView.findViewById(R.id.lv_card);
headerView = View.inflate(mContext, R.layout.top, null);footerView = View.inflate(mContext, R.layout.foot, null);
mTextNotExc = (TextView)headerView.findViewById(R.id.tv_exchange);friendTips = (ImageView)headerView.findViewById(R.id.iv_tips);allNumber = (TextView)footerView.findViewById(R.id.tv_number);llNumber = (LinearLayout)footerView.findViewById(R.id.ll_number);
mListView.addHeaderView(headerView, null, false);mListView.addFooterView(footerView, null, false);

在ListView中添加上头和尾布局,一样可以实现上述效果,而且这种方法比第一种的更好,它不用一次性把所有的数据全部加载出来,可以和平常的listView差不多使用,支持分页加载;
 
时间: 2024-12-28 16:46:47

Android 中ScrollView嵌套ListView 最简单有效的处理方法的相关文章

Android中ScrollView嵌套ListView只显示一行的解决方案

Android中ScrollView嵌套ListView只显示一行的解决方案 解决方案1: 直接把包含ListView控件的ScrollView控件从布局文件中去除,留下ListView控件,这是最简单快捷的解决办法. 如果一定要在ScrollView中包含ListView,则参考 解决方案2: public void showlist() { List<HashMap<String, String>> dataHashMaps = new ArrayList<HashMap

android中ScrollView嵌套ListView或GridView显示位置问题

Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即可. 1 android:focusableInTouchMode="true" 2 android:focusable="true" 还有一个问题:在ScrollView嵌套ListView或GridView时仅仅显示一行或两行,ListView或GridView无法

android中scrollview包含listView对高度设置

当scrollview中包含listView时,滑动的时候会出现问题..最常见的问题是listview滑动不了...问题原因是在加载listview时它的高度应该按照adapter所绑定的数据来确定,而不是fill_parent或者是wrap_content... 项目中用到了就把它抽取出来做个记录 import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import

anroid中ScrollView嵌套ListView

有时候项目里面需要ScrollView嵌套ListView,但是正常下ListView只会显示一行多一点,解决方法就是填充ListView数据后重新计算ListView的高度,这里有两种方法来实现. 第一种方法:重写ListView [java] view plaincopyprint? package com.jwzhangjie.test; import android.content.Context; import android.util.AttributeSet; import and

Android之ScrollView嵌套ListView冲突

在ScrollView中嵌套使用ListView,ListView只会显示一行多一点.两者进行嵌套,即会发生冲突.由于ListView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,那么里面的ScrollView高度计算就会出现问题.我们也就无法得到想要的效果.下面进入正题,我们将讨论ScrollView中嵌套ListView情况.核心解决方案: 重写ListView或者GridView的OnMesure 方法.对GridView同样适用. protect

Android之ScrollView嵌套ListView冲突 (listView只显示一行)

在ScrollView中嵌套使用ListView,ListView只会显示一行多一点.两者进行嵌套,即会发生冲突.由于ListView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,那么里面的ScrollView高度计算就会出现问题.我们也就无法得到想要的效果.下面进入正题,我们将讨论ScrollView中嵌套ListView情况.核心解决方案: 重写ListView或者GridView的OnMesure 方法.对GridView同样适用. protect

Android之ScrollView嵌套ListView

在ScrollView中嵌套使用ListView,ListView只会显示的内容只有一行多一点 解决方案: public class Utility { public void setListViewHeightBasedOnChildren(ListView listView) { //获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return;

android ScrollView 嵌套 ListView 不让listView滑动

1.重写listview的onMeasure() /** * 解决listview高度显示不正确 */ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, exp

android:ScrollView嵌套ListView的问题

在ScrollView中嵌套使用ListView,看起来ListView只会显示一行多一点,不能滑动.ListView的高度怎么改都有问题,与预期不符合.搜索了一些解决方案,我觉得最好不要用这样的设计,因为默认情况下android 禁止在ScrollView中放入另外的ScrollView,它的高度是无法计算的. 方法一:设置完ListView的Adapter后,根据ListView的子项目重新计算ListView的高度,然后把高度再作为LayoutParams设置给ListView,这样它的高