项目需要,要在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的图片没有错位了。本人新手,实在是不知道怎样解决了,网上没有这个相同的问题,麻烦大神们帮忙看下吧!!
------解决思路----------------------
onMeasure不要 写着个方法,你在自定义的listview的时候,重写的ontounch事件,,在按下的时候屏蔽父类拦截事件,否则不屏蔽,你要是需要给我邮箱,我给你demo。。。
------解决思路----------------------
给你一个工具类吧,完美解决问题。
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的,记住了,否则会出问题的...暂时没找到解决方法