2017-09-16 93 views
1

我在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

你是不是回收您的視圖。發佈完整代碼 –

回答

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元素的基類。 –

0

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

}} 
0

Recyclerview重用視圖..

你可以簡單地通過添加 '其他'

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

謝謝你的工作! – user8583428