gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:32:53 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com