recycleview 不能正常工作?

recycleview doesn't work correctly?

我是 android 的新手,现在正在使用 recyclerview,我想像这样将 recycleview 第 3 项颜色更改为蓝色:

  1. item0(默认)
  2. item1(默认)
  3. item2(默认)
  4. item3(蓝色)
  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 !

我真的很困惑。感谢您的帮助。

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

解决方案是在 else 条件下将颜色更改为默认颜色。

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

// 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();
}}

联系人 class 的数据源: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;
}}

和主要 activity :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 重用视图..

您只需添加 'else'

即可修复
if (position == 3){
        holder.first_name.setTextColor(Color.BLUE);
}
else{
        holder.first_name.setTextColor(Color.RED);
}