Android RecyclerView不会以编程方式更改第一个项目的背景颜色
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android RecyclerView不会以编程方式更改第一个项目的背景颜色,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2436字,纯文字阅读大概需要4分钟。
内容图文
我正在创建一个包含RecyclerView的列表.
每个列表项都是来自用户的帖子(现在是硬编码的).
每个帖子的背景都是从drawable文件夹中的图层列表XML文件加载的.
一切都按照预期与文本等工作,但我试图以编程方式更改背景颜色.它改变了每个项目的背景颜色,除了第一个项目,我无法弄清楚原因.
第一项始终获取由XML文件中名为shape_background的项内部形状的纯色指定的背景颜色,因此不会更改,但以下项目将获得颜色#ff22ff.
这是适配器的实现:
class PostListAdapter extends RecyclerView.Adapter<PostListAdapter.PostViewHolder>{
private LayoutInflater inflater;
private List<PostRow> data = Collections.emptyList();
PostListAdapter(Context context, List<PostRow> data) {
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
PostRow current = data.get(position);
holder.text.setText(current.text.toUpperCase());
holder.time.setText(current.time.toUpperCase());
holder.answers.setText(current.answers.toUpperCase());
try {
// "#ff22ff" will be changed to current.color, unique color for every post
// That string is parsed from a JSON request, hence the try-catch.
int color = Color.parseColor("#ff22ff");
holder.shape.setColor(color);
} catch (Exception e){
e.printStackTrace();
}
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.post_row, parent, false);
return new PostViewHolder(view);
}
@Override
public int getItemCount() {
return data.size();
}
class PostViewHolder extends RecyclerView.ViewHolder {
TextView text;
TextView time;
TextView answers;
GradientDrawable shape;
PostViewHolder(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
time = (TextView) itemView.findViewById(R.id.time);
answers = (TextView) itemView.findViewById(R.id.answers);
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(itemView.getContext(), R.drawable.bubble);
shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.shape_background));
}
}
}
为什么第一个项目的背景没有改变,但文本是什么?
先感谢您!
解决方法:
在onBindViewHolder上,获取您的视图(来自持有者),您需要更改背景颜色和&获取当前背景(可绘制的气泡,已在XML属性中设置)
LayerDrawable layerDrawable = (LayerDrawable) yourView.getBackground().getCurrent();
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id. shape_background).getCurrent();
// set you color based on position
gradientDrawable.setColor(Color.parseColor("#ff22ff"));
内容总结
以上是互联网集市为您收集整理的Android RecyclerView不会以编程方式更改第一个项目的背景颜色全部内容,希望文章能够帮你解决Android RecyclerView不会以编程方式更改第一个项目的背景颜色所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。