在一定数量的行之后重复使用recyclelerview行属性?

时间:2016-08-30 12:04:52

标签: android android-studio android-recyclerview

我正在创建一个带有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;
        }

1 个答案:

答案 0 :(得分:3)

除非您确切知道自己在做什么,否则不应触及RecyclerView's以外的onBindViewHolder()子视图。 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);
        }
    }
}