只add间距一次,不要多次add
目标实现下面的效果;
思考一下,很简单,Recycleview嵌套Recycleview;外层的item宽度固定,高度为自适应;内部为一个Recycleview实现的gradview,item宽度固定,然后给内层的recycleview设置一个间距:即addItemDecoration。
但是,事情会这么简单吗?简单我就不会写出来。照着思路一步步走下去,写好后发现,内部Item的间距竟然是会变动的,开始的时候是正常的1倍间距,往后拉多个时,变成了2倍行距,然后继续上啦或者下拉,3倍行距,然后继续继续。图如下:
你以为这样就完了? too young, 我的逻辑是点击按钮会更新下按钮的状态,然后再adapter.notify,就出现了点击一次,item的间距会增大一次,如下图:
注:往右滚动时因为设置了右侧的间距,删除右侧间距保留上下间距时,内部的Recycleview的竖直方向上的间距会一直变大,效果和图是一样的。
至于为什么会出现这样的问题,暂时也没搞清楚,希望大牛看到可以指点下
附上源代码:
外层recycleview的adapter和layout
public class MainAdater extends RecyclerView.Adapter<MainAdater.MyViewholder> implements View.OnClickListener {
List<MainBean> mList;
Context mContext;
public boolean shouldSet;
// ItemAdater itemAdater;
public MainAdater(List<MainBean> mList, Context mContext, boolean shouldSet) {
this.mList = mList;
this.mContext = mContext;
this.shouldSet = shouldSet;
}
//定义一个点击事件的接口
public static interface onRecycleviewItemClickListener {
void onItemClick(View view, MainBean data, int position);
}
private onRecycleviewItemClickListener mOnItemClickListener = null;
public void setOnItemClickListener(onRecycleviewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public MainAdater(List<MainBean> allWifi, Context mContext) {
this.mList = allWifi;
this.mContext = mContext;
}
//item的点击事件
@Override
public void onClick(View view) {
if (mOnItemClickListener != null) {
//注意这里使用getTag方法获取数据
mOnItemClickListener.onItemClick(view, (MainBean) view.getTag(R.id.id1), (Integer) view.getTag(R.id.id2));
}
}
class MyViewholder extends RecyclerView.ViewHolder {
RecyclerView gradview;
TextView textView;
public MyViewholder(View itemView) {