您的位置:首页 > 其它

两个listview(RecyclerView)联动上下展示不全问题解析

2017-07-24 14:03 302 查看
我们在项目中会遇到这种情况:(两个列表的数据对象不一样,样式排版不一样)放在一个界面,分为上下的排列方式。首先会想到用两个listview上线排列显示。但是你会发现当第一个listview超过一屏幕的话,下面那个将无法显示。介绍一下常用的两种方法

一、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
相关文章推荐