2017-12-06 111 views
0

RecyclerViewアイテムの背景を交互に変更したい。RecyclerViewアイテムの背景が交互に色が変わる

ここにアダプターのメソッドがあります。

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { 
private List<NewsModel> mNewsList; 

class ViewHolder extends RecyclerView.ViewHolder { 
    TextView newsNameText; 
    TextView newsDataText; 
    View listView; 
    public ViewHolder(View newsView) { 
     super(newsView); 
     newsNameText = (TextView) newsView.findViewById(R.id.news_Name); 
     newsDataText = (TextView) newsView.findViewById(R.id.news_Data); 
     listView = newsView; 
    } 
} 
public NewsAdapter(List<NewsModel> newsList) { 
    mNewsList = newsList; 
} 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false); 
    final ViewHolder holder = new ViewHolder(view); 
    return holder; 
} 
public void setData(List<NewsModel> viewData) { 
    mNewsList.clear(); 
    mNewsList.addAll(viewData); 
    notifyDataSetChanged(); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    NewsModel news = mNewsList.get(position); 
    holder.setIsRecyclable(true); 
    if(position % 2 == 0){ 
     holder.listView.setBackgroundColor(0x80E0EEEE); 
    } 
    holder.newsNameText.setText(news.getName()); 
    holder.newsDataText.setText(news.getData()); 
} 
@Override 
public int getItemCount() { 
    return mNewsList.size(); 
} 

}

I画面をタッチして、よりアイテム、順不同になる項目の背景色を表示するには下にスワイプすると、問題があります。交互ではありません。

私はこの方法を使用していますか?

ありがとうございます!

答えて

1

を試してみてください。スクロールダウンすると古いビューは新しいビューを作成するために使用されます。onBindViewHolderが呼び出されたときに古いビューのバックグラウンドカラーがすでに設定されていたため、onBindViewHolderにelse条件を指定する必要があります。注文。 onBindViewHolderコードを次のように変更してください。

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    NewsModel news = mNewsList.get(position); 
    holder.setIsRecyclable(true); 
    if(position % 2 == 0){ 
     holder.listView.setBackgroundColor(0x80E0EEEE); 
    }else{ 
     holder.listview.setBackgroundColor(#FFFFFF); 
    } 
    holder.newsNameText.setText(news.getName()); 
    holder.newsDataText.setText(news.getData()); 
} 
+0

ありがとうございます。できます。色は(0XFFFFFF)にする必要があります。 –

0

RecyclerViewは、新しいビューを作成するために、古いビューをリサイクルするので、それはこの

NewsModel news = mNewsList.get(getAdapterPosition()); 
holder.setIsRecyclable(true); 
if(getAdapterPosition() % 2 == 0){ 
    holder.listView.setBackgroundColor(0x80E0EEEE); 
}else{ 
    holder.listView.setBackgroundColor(000000); // use default color 
} 
関連する問題