我有recyclerView
个自定义布局(1 imageView
+ 2 TextViews
)..
问题:recyclerView
项目的文字为绿色..如果用户点击了recyclerView
中的项目,我需要将其更改为红色。
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title,desc;
public ImageView thumbnail;
public MyViewHolder(View view) {
super(view);
itemView.setOnClickListener(this);
title = (TextView) view.findViewById(R.id.text1);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
desc = (TextView) view.findViewById(R.id.desc);
whereToGo = title.getText().toString();
}
@Override
public void onClick(View view)
{
Intent i = new Intent(mContext, DisplayLockedLesson.class);
i.putExtra("Lesson Name", title.getText().toString());
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mContext.startActivity(i);
}
}
}
所以,我正在制作课程应用..当用户点击recyclerView
的项目时,它会更改此项目的颜色,告诉用户他之前完成了课程...
谢谢。
答案 0 :(得分:2)
创建一个变量,该变量将存储所单击的textview的位置并将其全局声明。
private int clickedTextViewPos=-1;
在视图中,只要点击位置,就将该位置设置为单击并且 调用notifyDataSetChanged()
notifyDataSetChanged() - 这会通知适配器数据已更改。
private class YourViewHolder extends RecyclerView.ViewHolder{
public YourViewHolder(View itemView) {
super(itemView);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickedTextViewPos = getAdapterPosition();
notifyDataSetChanged();
}
});
}
}
在onBindViewHolder中,如果位置相同,则显示红色或绿色的文本颜色。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(clickedTextViewPos==position){
edtUser.setTextColor(edtUser.getContext().getResources().getColor(R.color.red));
}else {
edtUser.setTextColor(edtUser.getContext().getResources().getColor(android.R.color.green));
}
}
答案 1 :(得分:1)
我认为你可以在hashmap或数据库中为每个项添加一个标志。 在项目onclicklistener方法中更改此标志...然后您可以阅读此标志以更改此项目的颜色。
答案 2 :(得分:1)
在recyclerview模型中,使用布尔值isChecked,并根据该值设置颜色。