ScrollView嵌套Listview后,listview的图片错位了

DonWZ 2015-01-31 12:04:08
项目需要,要在scrollview中嵌套listview,网上有大神的解决方案是,重写listveiw的onMeasure方法,
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
完美解决问题,但是后来发现,listView的第一个item图片有错位的情况,在网上搜索问题后,大部分解决方法是,为imageview设置一个TAG,在图片下载完成后对比tag内设置的图片url,如果相同则设置图片,如果不相同则不处理。但是目前测试这个方法是解决不了当前到的问题的。我新写了个demo重现了这个问题,发现就是重写的ListView的onMeasure方法的问题,我吧这个方法注释掉,运行,效果是listView不能滑动了,但是item的图片没有错位了。本人新手,实在是不知道怎样解决了,网上没有这个相同的问题,麻烦大神们帮忙看下吧!!
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy991852 2016-05-12
  • 打赏
  • 举报
回复
引用 4 楼 DonWZ 的回复:
[quote=引用 2 楼 u012301841 的回复:] 给你一个工具类吧,完美解决问题。
package com.woyou.utils;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * 如何在ScrollView中嵌套ListView
 * 
 * @author shenzhou 2015年1月17日
 */
public class ScrollViewUtils {

	public static 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();
		}

		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight
				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
		listView.setLayoutParams(params);
	}
}
不过listView的adapter适配器布局只能是LinearLayout的,记住了,否则会出问题的...暂时没找到解决方法
完美解决!之前没注意到item的根布局必须要LinearLayout,换成LinearLayout就解决问题了。谢谢了!![/quote] 兄弟,我也遇到和你一样的问题了,可是我用这个没有解决,listview item1中显示了item3中 的两张图片(item1本来只有3张图片的数据,现在多显示了两种,求解)
DonWZ 2015-02-02
  • 打赏
  • 举报
回复
引用 2 楼 u012301841 的回复:
给你一个工具类吧,完美解决问题。
package com.woyou.utils;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * 如何在ScrollView中嵌套ListView
 * 
 * @author shenzhou 2015年1月17日
 */
public class ScrollViewUtils {

	public static 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();
		}

		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight
				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
		listView.setLayoutParams(params);
	}
}
不过listView的adapter适配器布局只能是LinearLayout的,记住了,否则会出问题的...暂时没找到解决方法
完美解决!之前没注意到item的根布局必须要LinearLayout,换成LinearLayout就解决问题了。谢谢了!!
DonWZ 2015-02-02
  • 打赏
  • 举报
回复
引用 1 楼 u014468929 的回复:
onMeasure不要 写着个方法,你在自定义的listview的时候,重写的ontounch事件,,在按下的时候屏蔽父类拦截事件,否则不屏蔽,你要是需要给我邮箱,我给你demo。。。
本人邮箱,502998278@qq.com谢谢了!!
  • 打赏
  • 举报
回复
给你一个工具类吧,完美解决问题。
package com.woyou.utils;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 * 如何在ScrollView中嵌套ListView
 * 
 * @author shenzhou 2015年1月17日
 */
public class ScrollViewUtils {

	public static 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();
		}

		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight
				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
		listView.setLayoutParams(params);
	}
}
不过listView的adapter适配器布局只能是LinearLayout的,记住了,否则会出问题的...暂时没找到解决方法
guxiaozui 2015-01-31
  • 打赏
  • 举报
回复
onMeasure不要 写着个方法,你在自定义的listview的时候,重写的ontounch事件,,在按下的时候屏蔽父类拦截事件,否则不屏蔽,你要是需要给我邮箱,我给你demo。。。

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧