当ScrollView 嵌套 ListView时,会引起冲突,为解决这个冲突以下:html
新建一个自定义View,集成ListView,重写OnMeasure方法,从新计算ListView的高度,不过这样的话会致使ListView没法滑动,还好有ScrollView,能够弥补这一缺点;java
我建立一个HempListView的自定义类android
代码以下:ide
/** * 做者:jaume * <p/> * 建立于:2016/9/8 * <p/> * 描述:解决ScrollView与ListView之间的冲突 */ public class HempListView extends ListView { private Paint paint; public HempListView(Context context, AttributeSet attrs) { super(context, attrs); } //重写该方法后,致使listView没法滑动 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
XML代码:布局
中间是我在后来加的注释,你能够删掉,直接使用优化
<ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <!-- ScrollView中只能放一个控件,我选择放一个布局控件,这样能够在布局中添加本身想添加的控件 --!> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 我定义的一个ViewPager,总布局是上面ViewPager,下面ListView显示 --!> <android.support.v4.view.ViewPager android:id="@+id/mViewPager" android:layout_width="fill_parent" android:layout_height="150dp" /> <!-- 这个就是自定义的ListView,将他调出来使用 --!> <com.test.bwie.jamlive.view.HempListView android:id="@+id/mListView_Remeng" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fadingEdgeLength="0dp" android:padding="10dp" android:scrollbars="none"></com.test.bwie.jamlive.view.HempListView> </LinearLayout> </ScrollView>
在Java代码中调用:code
//获取控件 private HempListView mHempListView; //初始化控件 mHempListView = (HempListView) view.findViewById(R.id.mHempListView); //配置优化 mHempListView.setAdapter(new MyBaseAdapter()); //new MyBaseAdapter() 这个是优化的类
代码不是很全,能够相应的复制拿来用,这样就能够解决ScrollView与ListView的嵌套问题了。htm
忽然想到,能够用如下方法来模仿上拉加载,下拉刷新,能够参考看下,有什么不足但愿告知get
// 建立一个header 头部,想要建立一个什么类型的就建立一个 TextView header = new TextView(getActivity()); header.setText("刷新"); header.setTextColor(Color.WHITE); header.setBackgroundColor(Color.RED); header.setGravity(Gravity.CENTER); header.setPadding(15, 15, 15, 15); // 建立一个header TextView footer= new TextView(getActivity()); footer.setText("加载更多"); footer.setTextColor(Color.WHITE); footer.setBackgroundColor(Color.RED); footer.setGravity(Gravity.CENTER); footer.setPadding(15, 15, 15, 15); //以后添加到listView中 listView.addHeaderView(header); //添加结尾的 listView.addFooterView(footer); /*************最后才能配置Adapter,不然出错****/ listView.setAdapter(new MyPagerAdapteer); //运行,就会显示效果