Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更改recyclerview中某些项目的视图背景?_Android_Android Recyclerview - Fatal编程技术网

Android 如何更改recyclerview中某些项目的视图背景?

Android 如何更改recyclerview中某些项目的视图背景?,android,android-recyclerview,Android,Android Recyclerview,所以本质上,我有一个recyclerview,它有一个级别列表。但本质上,我希望某些物品有一个黑色的背景,以表明它们还没有被锁定。(有点像电子游戏) 我目前的方法是: @Override public void onBindViewHolder(BracketsAdapter.ViewHolder viewHolder, int position) { // Get the data model based on position Bracket brac

所以本质上,我有一个recyclerview,它有一个级别列表。但本质上,我希望某些物品有一个黑色的背景,以表明它们还没有被锁定。(有点像电子游戏)

我目前的方法是:

@Override
    public void onBindViewHolder(BracketsAdapter.ViewHolder viewHolder, int position) {
        // Get the data model based on position
        Bracket bracket = bracketsList.get(position);
        int color = UserPreferences.getInstance().getBracket();

        // Set item views based on your views and data model
        TextView textView = viewHolder.nameTextView;
        textView.setText(bracket.toString());
        Log.d("Bracket level", ""+bracket.getId());
        if(color < bracket.getId()) {
            textView.setBackgroundResource(R.color.black); // suggests level is locked
        }

    }
@覆盖
BindViewHolder上的公共无效(括号Sadapter.ViewHolder ViewHolder,内部位置){
//根据位置获取数据模型
支架=支架列表获取(位置);
int color=UserPreferences.getInstance().getBracket();
//基于视图和数据模型设置项目视图
TextView TextView=viewHolder.nameTextView;
textView.setText(方括号.toString());
Log.d(“括号级别”,“括号+括号.getId());
if(颜色

这种方法的问题是,它最初是有效的,但当我向下滚动并备份时,不应该上色的项目最终会上色。为什么会这样?有更好的实现方法吗?

回收视图总是重复使用旧视图,因此您会遇到这个问题,要解决这个问题,您应该在每次调用bindViewHolder时设置颜色,所以尝试这样做

if(color < bracket.getId()) {
    textView.setBackgroundResource(R.color.black); // suggests level is locked
} else {
    textView.setBackgroundResource(R.color.defaultcolor); // default color
}
if(颜色

这很好。

抓得好。我应该读更多关于recyclerview的工作原理。