Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView项目背景颜色交替无序_Android_Android Recyclerview - Fatal编程技术网

Android 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

我想用交替颜色更改我的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();
}
公共类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());
}