我正在更改onBindViewHolder中第一个textview(位置0)的背景
这是我的RecyclerAdapter
public class MenuCardAdapter extends RecyclerView.Adapter<MenuCardAdapter.MenuCardViewHolder> {
//Context and Reference Parent
private Context context;
private List<MenuCard> objects;
private ItemOnCardviewMenu listener;
MenuCardViewHolder holder = null;
public MenuCardAdapter(Context context , List<MenuCard> objects, ItemOnCardviewMenu listener) {
this.context = context;
this.objects = objects;
this.listener = listener;
}
@Override
public MenuCardAdapter.MenuCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_card, parent, false);
MenuCardViewHolder vHolder = new MenuCardViewHolder(v,this.listener);
return vHolder;
}
public MenuCard getItem(int position) {
return objects.get(position);
}
@Override
public void onBindViewHolder(final MenuCardViewHolder holder, final int position) {
holder.title.setText(objects.get(position).getmTexto());
holder.id.setText(objects.get(position).getmId());
if(position==0){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
this.holder = holder;
}
@Override
public int getItemCount() {
return objects.size();
}
class MenuCardViewHolder extends RecyclerView.ViewHolder
{
TextView title;
TextView id;
CardView card;
public MenuCardViewHolder(final View itemView, final ItemOnCardviewMenu listener) {
super(itemView);
id = (TextView) itemView.findViewById(R.id.id_card);
title = (TextView) itemView.findViewById(R.id.card_text);
card = (CardView) itemView.findViewById(R.id.card_view);
card.setTag(this.card);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
listener.onRowClicked(getAdapterPosition(), v, card, id.getText().toString());
}
}
});
}
}
}
这部分是我改变背景的地方
@Override
public void onBindViewHolder(final MenuCardViewHolder holder, final int position) {
holder.title.setText(objects.get(position).getmTexto());
holder.id.setText(objects.get(position).getmId());
if(position==0){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
this.holder = holder;
}
但是当我运行应用程序看起来像这个菜单pos 0。
但同时位置8改变其颜色 菜单pos 7
我不知道为什么会发生这种情况,只要点击“选项2”,“选项9”也会改变背景。
提前谢谢。答案 0 :(得分:1)
你必须放置else case,因为它重用了对象(视图持有者模式)。
if(position==0){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
else{
holder.title.setBackgroundColor(context.getResources().getColor(some other color));
}
答案 1 :(得分:0)
ListView重用项目,否则也需要条件。否则你将面临这样的行为。滚动的第0个位置项目在外面,并查看其他列表项目重复使用以供显示。所以已经为其他项目设置了背景显示。
答案 2 :(得分:0)
使用
if(position == 0){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black, context.getTheme()));
}else{
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
else{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
holder.title.setBackgroundColor(context.getResources().getColor(R.color.green, context.getTheme()));
}else{
holder.title.setBackgroundColor(context.getResources().getColor(R.color.green));
}
}
这是因为在API 23及以上版本中不推荐使用 getColor(int id),如果api级别为23,则应使用 getColor(int id,Theme theme)或更高
答案 3 :(得分:0)
由于
,我可以解决我的问题Prashanth Debbadwar提出你的建议
这就是模拟菜单的方法
@Override
public void onBindViewHolder(final MenuCardViewHolder holder, final int position) {
holder.title.setText(objects.get(position).getmTexto());
holder.id.setText(objects.get(position).getmId());
if(position==posOption){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
else{
holder.title.setBackgroundColor(context.getResources().getColor(R.color.colorPrimary));
}
holder.title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(posOption != position){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
posOption = position;
}else {
holder.title.setBackgroundColor(context.getResources().getColor(R.color.colorPrimary));
}
notifyDataSetChanged();
}
});
this.holder = holder;
}
我也从活动
中删除界面