android一个页面上多个listview
android一个页面上多个listview,在滚动的时候,需要两个listview能够一起滚动,看起来是一个view。
这个功能的具体实现,参考:
http://blog.csdn.net/xia296/article/details/8128674
最主要的代码是:
/** * 设置listview高度,注意listview子项必须为LinearLayout才能调用该方法 * @param listview listview * */ public static void setListViewHeight(ListView listview){ int totalHeight = 0; ListAdapter adapter= listview.getAdapter(); if(null != adapter){ for (int i = 0; i <adapter.getCount(); i++) { View listItem = adapter.getView(i, null, listview); if (null != listItem) { listItem.measure(0, 0);//注意listview子项必须为LinearLayout才能调用该方法 totalHeight += listItem.getMeasuredHeight(); } } ViewGroup.LayoutParams params = listview.getLayoutParams(); params.height = totalHeight + (listview.getDividerHeight() * (listview.getCount() - 1)); listview.setLayoutParams(params); } }
具体在代码中的使用这个方法:
public void loadAdvanceGameView(){ if (mAdvanceAdapter == null) { mAdvanceAdapter = new GameDetailAdapter(mContext, mAdvanceGameList); advanceListView.setAdapter(mAdvanceAdapter); }else { mAdvanceAdapter.notifyDataSetChanged(); } setListViewHeight(advanceListView); LoadMyLocalView(); } private void LoadMyLocalView() { mLocalGameList.clear(); mLocalGameList.addAll(AppManager.get().getSelectedAppBeans()); removeRepeatApp(); if (mLocalAdapter == null) { mLocalAdapter = new AppBeanAdapter(mContext, mLocalGameList); localListView.setAdapter(mLocalAdapter); }else { mLocalAdapter.notifyDataSetChanged(); } setListViewHeight(localListView); }
我在使用的时候,其中listview里面的item的view是用RelativeLayout创建的。
但是后面测试的时候,在部分机器上报错。
具体的解决方法参考:
分析java.lang.NullPointerException thrown in RelativeLayout measure()
假如开始就是用LinearLayout,就不会报错。