我正在使用 recyclerview 创建一个抽屉导航,然后需要突出显示 recyclerview 的选定/单击行。
我将 .setBackgroundColor(Color.GRAY)
放入 addOnItemTouchListener
中。
它有效,但背景颜色属性在一定数量的行后重复......
我该如何解决它?
提前致谢...
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if(child != null && gestureDetector.onTouchEvent(e)) {
int position = rv.getChildAdapterPosition(child);
DrawerItem model = mDrawerItemList.get(position);
child.setBackgroundColor(Color.GRAY);
drawerLayout.closeDrawers();
Toast.makeText(RecyclerNavigationActivity.this,String.valueOf(position),Toast.LENGTH_SHORT).show();
}
return false;
}
最佳答案
除非您确切知道自己在做什么,否则不应从 onBindViewHolder()
外部触摸 RecyclerView 的
subview 。 RecyclerView 正在尝试重用不再可见的布局,这就是为什么如果您更改一项的颜色并且在重用布局时不将其更改回来,更改的颜色将持续存在。
您需要做的是将 OnClickListener
附加到 ViewHolder
并在 onBindViewHolder()
方法中更新其背景。
public class YourAdapter extends RecyclerViewAdapter {
...
int selectedItem = -1;
public void setSelectedItem(int item) {
this.selectedItem = i;
this.notifyItemChanged(selectedItem);
}
@Override
onBindViewHolder(ViewHolder holder, int position) {
... // other stuff here
if (position == selectedItem) {
holder.layout.setBackgroundColor(Color.GRAY);
} else {
holder.layout.setBackgroundColor(Color.WHITE);
}
}
}
关于android - 在一定数量的行之后重复 recyclerview 行属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39227019/