android - 在一定数量的行之后重复 recyclerview 行属性?

标签 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;
        }

最佳答案

除非您确切知道自己在做什么,否则不应从 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/

相关文章:

android - 在 LinearLayout 中如何将 EditText 放在按钮上?

android - EditText 在 RecyclerView 上丢失其内容。如何恢复其内容?

android - 从 DialogFragment 返回值

android - JNI 从 C++ 调用 Java 方法

java - Android TCP - 程序崩溃

java - Android App占用大量内存

android - 如何实现具有不同行数项目的 RecyclerView?

java - Libgdx 滚动 TiledMaps

android - 删除 JCenter() 后使用 Android YouTube 视频播放器 'com.pierfrancescosoffritti.androidyoutubeplayer:core:10.0.5' 时出现错误

Intellij Idea/Android Studio 中的 Android 代码风格