RecyclerView 设置默认选中项,以View的形式保存,为什么在滑动过程中selectedView 会变化?
((MightyViewHolder) viewHolder).setText(R.id.tv_Category, mDatas.get(position));
TextView textView = ((MightyViewHolder) viewHolder).getView(R.id.tv_Category);
Log.d(TAG, "onBindViewHolder: " + textView.getText());
textView.setTag(position);
// 获取选中的资源资源文件
Drawable selectDrawable = getContext().getResources().getDrawable(R.drawable.home_page_white_point);
selectDrawable.setBounds(0, 0,
selectDrawable.getMinimumWidth(), selectDrawable.getMinimumHeight());
// 获取未选中的资源文件
Drawable unSelectedDrawable = getContext().getResources().getDrawable(R.drawable.home_page_jdred_point);
unSelectedDrawable.setBounds(0, 0,
unSelectedDrawable.getMinimumWidth(), unSelectedDrawable.getMinimumHeight());
if (selectPosition == -1) {
Log.d(TAG, "transform: 此时selectedView为null,position:" + position + " text为:" + textView.getText());
// this.selectedView = textView;
this.selectPosition = position;
textView.setCompoundDrawables(null, null, null, selectDrawable);
return;
}
Log.d(TAG, "transform: selectedPosition: " + selectPosition + "------position: " + position);
if (position == selectPosition) {
textView.setCompoundDrawables(null, null, null, selectDrawable);
return;
}
w我使用选中项 的位置的形式,就不会变化,注释掉的是使用SelectedView’的形势,
((MightyViewHolder) viewHolder).setText(R.id.tv_Category, mDatas.get(position)); TextView textView = ((MightyViewHolder) viewHolder).getView(R.id.tv_Category); Log.d(TAG, "onBindViewHolder: " + textView.getText()); // 获取选中的资源资源文件 Drawable selectDrawable = getContext().getResources().getDrawable(R.drawable.home_page_white_point); selectDrawable.setBounds(0, 0, selectDrawable.getMinimumWidth(), selectDrawable.getMinimumHeight()); // 获取未选中的资源文件 Drawable unSelectedDrawable = getContext().getResources().getDrawable(R.drawable.home_page_jdred_point); unSelectedDrawable.setBounds(0, 0, unSelectedDrawable.getMinimumWidth(), unSelectedDrawable.getMinimumHeight()); if (this.selectedView == null) { Log.d(TAG, "transform: 此时selectedView为null,position:"+position); this.selectedView = textView; // textView.setCompoundDrawables(null, null, null, selectDrawable); return; } else { TextView t = (TextView) this.selectedView; Log.d(TAG, "transform: 此时selectedView不为null,position:"+position); t.setCompoundDrawables(null, null, null, selectDrawable); } textView.setCompoundDrawables(null, null, null, unSelectedDrawable); ((MightyViewHolder) viewHolder).setOnClickTextView(R.id.tv_Category, this::onClick); zu昨天晚上bindView 是这样的,处理else了-->this.selectedView自己就变了。。。我猜测是复用的问题,以前解决复用,是把状态放在map中 每次刷新的时候根据map中的状态去绑定数据,这次因为是单选,这次的思路是 把选中的view的保存起来。点击的时候修改selectedView,就是把上一个选中的selectedView设置为未选中,当前点击的View 设置为selectedView。else 已经处理了 但是还是会变。。跪求大佬有空更新一下RecyclerView的使用。复用 缓存啥的对于状态的,处理了if,还要处理else,否则就是复用的状态。因为RecyclerView的Item是复用的。