recycleview无法正常工作?

问题描述:

我在Android和现在recyclerview新的工作,我想改变recycleview第3项的颜色为蓝色是这样的:recycleview无法正常工作?

  1. item0(默认)
  2. 物品1(默认)
  3. ITEM2(默认)
  4. 项目3(蓝色)
  5. ITEM4(默认)

。 。 。 所以,我写下代码,但不幸的是,当我滚动列表我得到这个结果!

@Override 
public void onBindViewHolder(vh holder, int position) { 
    Contacts example = contacts.get(position); 
    holder.first_name.setText(example.name); 
    holder.last_name.setText(example.last_name); 

    if (position == 3){ 
     holder.first_name.setTextColor(Color.BLUE); 
    } 

} 

many items changed to blue !

我真的很困惑。谢谢你的帮助 。

+2

发表您的完整适配器代码修复 –

+0

你是不是回收您的视图。发布完整代码 –

RecyclerView中,视图被重新使用。一个项目的视图将在滚动后用于另一个项目。所以在这种情况下,多个视图的颜色会发生变化。

解决方法是在else条件中将颜色更改为默认值。

if (position == 3) { 
    holder.first_name.setTextColor(Color.BLUE); 
} else { 
    holder.first_name.setTextColor(Color.BLACK); 
} 
+0

谢谢你的工作!但我不确切知道“View”在android中的含义。你可以帮我吗 ?? – user8583428

+0

很高兴我能帮到你。另外不要忘记提高答案。在android中,View是所有UI元素的基类。 –


// adapter.java ===>

public class Adapter extends RecyclerView.Adapter<Adapter.vh> { 

private List<Contacts> contacts; 

public Adapter(List<Contacts> contacts) { 
    this.contacts = contacts; 
} 

public class vh extends RecyclerView.ViewHolder { 
    protected TextView first_name; 
    protected TextView last_name; 
    protected ImageView Image; 

    public vh(View v) { 
     super(v); 
     first_name = (TextView) v.findViewById(R.id.first); 
     last_name = (TextView) v.findViewById(R.id.last); 
     Image = (ImageView) v.findViewById(R.id.imageView); 
    } 
} 

@Override 
public Adapter.vh onCreateViewHolder(ViewGroup parent, int viewType) { 
    Log.d("creat",String.valueOf(viewType)); 
    Log.d("creat",String.valueOf(parent)); 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false); 
    Log.d("View",String.valueOf(v)); 
    return new vh(v); 
} 

@Override 
public void onBindViewHolder(vh holder, int position) { 
    Contacts example = contacts.get(position); 
    holder.first_name.setText(example.name); 
    holder.last_name.setText(example.last_name); 

    if (position == 3){ 
     holder.first_name.setTextColor(Color.BLUE); 
    } 

} 

@Override 
public int getItemCount() { 
    Log.d("Item","ItemCount"); 
    return contacts.size(); 
}} 

用于数据源的接触类:Contacts.java ==>

public class Contacts { 

public String name; 
public String last_name; 

public Contacts(String name, String last_name) { 
    this.name = name; 
    this.last_name = last_name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getLast_name() { 
    return last_name; 
} 

public void setLast_name(String last_name) { 
    this.last_name = last_name; 
}} 

和ma在活动:ListActivity.java ==>

public class ListActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 


    List<Contacts> l = new ArrayList<>(); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 
    l.add(new Contacts("Alireza","Akbari")); 
    l.add(new Contacts("Akbari","Alireza")); 




    RecyclerView rv = (RecyclerView) findViewById(R.id.recycler_view); 
    Adapter cAdapter = new Adapter(l); 
    rv.setAdapter(cAdapter); 
    LinearLayoutManager lm = new LinearLayoutManager(this); 
    lm.setOrientation(LinearLayoutManager.VERTICAL); 
    rv.setLayoutManager(lm); 

}} 

Recyclerview重用视图..

你可以简单地通过添加 '其他'

if (position == 3){ 
     holder.first_name.setTextColor(Color.BLUE); 
} 
else{ 
     holder.first_name.setTextColor(Color.RED); 
} 
+0

谢谢你的工作! – user8583428