问题描述:
RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认
代码如下: 主要的参数是 mPosition
public class SubjectListAdapter extends RecyclerView.Adapter<SubjectListAdapter.MyViewHolder> {
private List<String> dataList;
private Context context;
private List<Boolean> isClicks = new ArrayList<>(); // 控件是否被点击,默认为 false,如果被点击,改变值,控件根据值改变自身颜色
private int mPosition = 0;
//构造方法,传入数据
public SubjectListAdapter(Context context, List<String> dataList){
this.context = context;
this.dataList = dataList;
}
@NonNull
@Override
public SubjectListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.subject_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final String subjectString = dataList.get(position);
// 赋值
holder.tv_subject_name.setText(subjectString);
// 设置默认选择第一个
if (mPosition != position) {
holder.tv_subject_name.setTextSize(12);
holder.tv_subject_name.getPaint().setFakeBoldText(false);
holder.rl_subject.setBackgroundResource(R.drawable.main_background);
}else if (mPosition == position) {
holder.tv_subject_name.setTextSize(14);
holder.tv_subject_name.getPaint().setFakeBoldText(true);
holder.rl_subject.setBackgroundResource(R.drawable.bag_subject_item_selected);
}
holder.rl_subject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPosition = position; // 选中点击的位置
notifyDataSetChanged(); // 更新数据
}
});
}
@Override
public int getItemCount() {
return dataList.size();
}
//内部类,绑定控件
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv_subject_name;
LinearLayout rl_subject;
public MyViewHolder(View view) {
super(view);
tv_subject_name = view.findViewById(R.id.tv_subject_name);
rl_subject = view.findViewById(R.id.rl_subject);
}
}
}