SetBackground to only one texview in cardview 同时改变两个背景
SetBackground to only one texview in cardview is changing two background at the same time
我正在更改 onBindViewHolder 中第一个文本视图(位置 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;
}
但是当我 运行 应用程序看起来像这个菜单位置 0。
但同时位置8改变了颜色
菜单位置 7
我不知道为什么会这样,点击 "option 2" "option 9" 也会更改它的背景。
提前致谢。
你还必须加上 else 大小写,因为它会重用对象(视图持有者模式)。
if(position==0){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
else{
holder.title.setBackgroundColor(context.getResources().getColor(some other color));
}
ListView 重复使用项,因此还需要其他条件。否则你将面临这样的行为。当您滚动第 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));
}
}
这是因为 getColor(int id) 在 API 的 23 及更高版本上已弃用,您应该使用 getColor(int id,主题 theme) 如果 api 等级为 23 或更高
感谢
我可以解决我的问题
Prashanth Debbadwar for your suggestion
这是模拟菜单的方法
@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;
}
我还从 activity
中删除了界面
我正在更改 onBindViewHolder 中第一个文本视图(位置 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;
}
但是当我 运行 应用程序看起来像这个菜单位置 0。
但同时位置8改变了颜色
菜单位置 7
我不知道为什么会这样,点击 "option 2" "option 9" 也会更改它的背景。
提前致谢。
你还必须加上 else 大小写,因为它会重用对象(视图持有者模式)。
if(position==0){
holder.title.setBackgroundColor(context.getResources().getColor(R.color.black));
}
else{
holder.title.setBackgroundColor(context.getResources().getColor(some other color));
}
ListView 重复使用项,因此还需要其他条件。否则你将面临这样的行为。当您滚动第 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));
}
}
这是因为 getColor(int id) 在 API 的 23 及更高版本上已弃用,您应该使用 getColor(int id,主题 theme) 如果 api 等级为 23 或更高
感谢
我可以解决我的问题Prashanth Debbadwar for your suggestion
这是模拟菜单的方法
@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;
}
我还从 activity
中删除了界面