Android RecyclerView项目背景颜色交替无序
我想用交替颜色更改我的RecyclerView项目背景 下面是适配器中的方法Android RecyclerView项目背景颜色交替无序,android,android-recyclerview,Android,Android Recyclerview,我想用交替颜色更改我的RecyclerView项目背景 下面是适配器中的方法 public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { private List<NewsModel> mNewsList; class ViewHolder extends RecyclerView.ViewHolder { TextView newsNameText; T
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();
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
私人名单;
类ViewHolder扩展了RecyclerView.ViewHolder{
text查看新闻名称text;
文本查看新闻数据文本;
视图列表视图;
公共视图持有者(查看新闻视图){
超级(新闻视图);
newsNameText=(TextView)newsView.findViewById(R.id.news\u Name);
newsDataText=(TextView)newsviewbyd(R.id.news\u数据);
listView=新闻视图;
}
}
公共新闻适配器(列表新闻列表){
mNewsList=新闻列表;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.news_项,parent,false);
最终视图持有者=新视图持有者(视图);
报税表持有人;
}
公共void setData(列表视图数据){
mNewsList.clear();
mNewsList.addAll(视图数据);
notifyDataSetChanged();
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
NewsModel news=mNewsList.get(位置);
holder.setIsRecyclable(真);
如果(位置%2==0){
holder.listView.setBackgroundColor(0x80E0EEEE);
}
holder.newsNameText.setText(news.getName());
holder.newsDataText.setText(news.getData());
}
@凌驾
public int getItemCount(){
返回mNewsList.size();
}
}
问题是,当我触摸屏幕并向下滑动以查看更多项目时,项目背景颜色会出现问题。它不是交替的。
我用这种方法错了吗
谢谢 试试这个
NewsModel news = mNewsList.get(getAdapterPosition());
holder.setIsRecyclable(true);
if(getAdapterPosition() % 2 == 0){
holder.listView.setBackgroundColor(0x80E0EEEE);
}else{
holder.listView.setBackgroundColor(000000); // use default color
}
这是因为
RecyclerView
回收旧视图以创建新视图。向下滚动旧视图以创建新视图时,由于调用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());
}