两个listview(RecyclerView)联动上下展示不全问题解析
2017-07-24 14:03
302 查看
我们在项目中会遇到这种情况:(两个列表的数据对象不一样,样式排版不一样)放在一个界面,分为上下的排列方式。首先会想到用两个listview上线排列显示。但是你会发现当第一个listview超过一屏幕的话,下面那个将无法显示。介绍一下常用的两种方法
一、LinearListView
用 LinearLayout 实现的 ListView,可解决多个 ListView 并存等问题。用起来很简单
a: compile ‘com.github.frankiesardo:linearlistview:1.0.1@aar’
(如下)
![](https://img-blog.csdn.net/20170724135306466?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1NETl9GbGFwcHlCaXJk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
二、思路:复合是Adapter(只是放入一个lsitview。在自定义adpter的时候出入两个list集合。分为上下两个list.关键是在如何去显示问题)直接上代码
注意:在listView的adapter中使用多个ViewHoler时每一个ViewHolder的id不能用ButterKnife生成要手动去findViewById,这是因为adapter无法区分viewholder对应的布局文件会提示空指针。(但是在RecyclerView中可以)
一、LinearListView
用 LinearLayout 实现的 ListView,可解决多个 ListView 并存等问题。用起来很简单
a: compile ‘com.github.frankiesardo:linearlistview:1.0.1@aar’
(如下)
二、思路:复合是Adapter(只是放入一个lsitview。在自定义adpter的时候出入两个list集合。分为上下两个list.关键是在如何去显示问题)直接上代码
public class OrgUserAdapterNew extends BaseAdapter { private List<SelectPerosnBeanNew.OrgsBean> groupList; private List<SelectPerosnBeanNew.UsersBean> childPersonList; private Context mContext; private final int TOP_ITEM = 0, BOTTOM_ITEM = 1, TYPE_COUNT = 2; private ImageOptions imageOptions; /** * 头部列表数据的大小 */ private int TopCount = 0; public OrgUserAdapterNew(Context mContext, List<SelectPerosnBeanNew.OrgsBean> groupList, List<SelectPerosnBeanNew.UsersBean> childPersonList) { this.mContext = mContext; this.groupList = groupList; this.childPersonList = childPersonList; TopCount = groupList.size(); imageOptions = new ImageOptions.Builder() .setImageScaleType(ImageView.ScaleType.CENTER_CROP) // .setRadius(DensityUtil.dip2px(radius)) .setIgnoreGif(false) .setCrop(true)//是否对图片进行裁剪 .setFailureDrawableId(R.drawable.placeholder) .setLoadingDrawableId(R.drawable.sidebar001) .build(); } /** * 设置Item显示的数据集合 * * @param groupList */ public void setTopList(List<SelectPerosnBeanNew.OrgsBean> groupList) { this.groupList = groupList; TopCount = groupList.size(); notifyDataSetChanged(); } /** * 设置Item显示的数据集合 * * @param childPersonList */ public void setBottomList(List<SelectPerosnBeanNew.UsersBean> childPersonList) { this.childPersonList = childPersonList; notifyDataSetChanged(); } @Override public int getCount() { int count = 0; if (groupList != null && childPersonList != null) { count = TopCount + childPersonList.size(); } if (groupList != null && childPersonList == null) { count = TopCount; } if (groupList != null && childPersonList == null) { count = childPersonList.size(); } return count; } @Override public Object getItem(int position) { if (position >= 0 && position < TopCount) { return groupList.get(position); } if (position > TopCount) { return childPersonList.get(position - TopCount); } if (position <= 1) { return null; } return null; } @Override public long getItemId(int position) { return position; } /** * 该方法返回多少个不同的布局 */ @Override public int getViewTypeCount() { // TODO Auto-generated method stub return TYPE_COUNT; } /** * 获取当前需要显示布局的类型 * return TOP_ITEM则表示上面半部分列表 * return BOTTOM_ITEM则表示下半部分列表 **/ @Override public int getItemViewType(int position) { if (position < TopCount) return TOP_ITEM; else return BOTTOM_ITEM; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolderTop viewHolderTop = null; ViewHolderBottom viewHolderBottom = null; if (convertView == null) { if (getItemViewType(position) == TOP_ITEM) { viewHolderTop = new ViewHolderTop(); convertView = LayoutInflater.from(mContext).inflate( R.layout.workgroup_item, null); viewHolderTop.tvGroupname= (TextView) convertView.findViewById(R.id.tv_groupname); convertView.setTag(viewHolderTop); } else { viewHolderBottom = new ViewHolderBottom(); convertView = LayoutInflater.from(mContext).inflate( R.layout.newmodule_selectmember_item, null); viewHolderBottom.itemName= (TextView) convertView.findViewById(R.id.item_name); viewHolderBottom.ivImgtouxiang= (CircleImageView) convertView.findViewById(R.id.iv_imgtouxiang); viewHolderBottom.itemPostion= (TextView) convertView.findViewById(R.id.item_postion); convertView.setTag(viewHolderBottom); } } else { if (getItemViewType(position) == TOP_ITEM) { viewHolderTop = (ViewHolderTop) convertView.getTag(); } else { viewHolderBottom = (ViewHolderBottom) convertView.getTag(); } } if (position < TopCount) { viewHolderTop.tvGroupname.setText(groupList.get(position).getName()); } else { viewHolderBottom.itemName.setText(childPersonList.get(position-TopCount).getName()); viewHolderBottom.itemPostion.setText(childPersonList.get(position-TopCount).getOrg()); if (!TextUtils.isEmpty(childPersonList.get(position-TopCount).getHeadimages())) { x.image().bind(viewHolderBottom.ivImgtouxiang, RequestUtils.getImages(childPersonList.get(position-TopCount).getHeadimages()).get(0), imageOptions); } } return convertView; } static class ViewHolderBottom { // @BindView(R.id.iv_imgtouxiang) CircleImageView ivImgtouxiang; // @BindView(R.id.item_name) TextView itemName; // @BindView(R.id.item_postion) TextView itemPostion; // ViewHolderBottom(View view) { // ButterKnife.bind(this, view); // } } static class ViewHolderTop { // @BindView(R.id.tv_groupname) TextView tvGroupname; // // ViewHolderTop(View view) { // ButterKnife.bind(this, view); // } } }
注意:在listView的adapter中使用多个ViewHoler时每一个ViewHolder的id不能用ButterKnife生成要手动去findViewById,这是因为adapter无法区分viewholder对应的布局文件会提示空指针。(但是在RecyclerView中可以)
相关文章推荐
- 同一个listview上下展示不同布局,解决两个listview上下显示不全问题
- Android ListView/recyclerView条目中EditText容易失去焦点的问题和取出横向时上下滚动有阴影
- scrollview+tablayout+viewpager+三个fragment+listview滑动冲突、展示不全
- Android开发:ListView、AdapterView、RecyclerView全面解析
- RecyclerView 内嵌RecyclerView滑动到半截离开再次回来自动滑动完全展示问题
- MVP+Rxjava+Retryfit+分页加载+RecyclerView展示,解析以集合开头的json数据
- 关于recyclerView上下滑动时的崩溃问题
- 页面有两个RecyclerView无法正常显示且镶嵌ScrollView滑动异常问题
- RecyclerView的基本用法与四种数据展示(listview,griderview,单行,多行)
- Android ListView,GridView,RecyclerView图片加载错位闪动问题解决办法
- RecyclerView 横向的listview 直接解决你的自定义问题
- RecyclerView的多条目展示,使用OkHttp解析数据
- 关于RecyclerView实现瀑布流,上下滑动时item之间互换位置的问题
- 【Android】ListView、RecyclerView异步加载图片引起错位问题
- 关于recyclerView快速上下滑动时的崩溃问题
- 解决ViewPager横向的ViewGroup滑动冲突的问题,例如HorizontalListView,RecyclerView,各种layout等
- RecyclerView,ListView,ViewPager 等各种控件复用问题解决方案
- SwipeRefreshLayout与ListView,GridView,RecyclerView ,ScrollView 冲突问题总结
- 解决RecyclerView显示不全的问题
- 购物车 ListView 包含了EditText的问题,最终解决换RecyclerView来做,哈哈哈哈