【发布时间】:2017-06-13 11:34:37
【问题描述】:
我正在使用 recyclerView 构建一个切换按钮列表(如小键盘),我想实现:
- 当用户通过单击“打开”按钮时,会“关闭”所有其他按钮
我试图在视图持有者类中添加一个onClickListener,并调用notifyDataSetChanged(),以便调用onBindViewHolder(final ViewHolder holder, int position),然后更改按钮的状态。
但它不起作用,点击的按钮不会改变它的状态。
ViewHolder
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ToggleButton button;
String id;
public ViewHolder(View itemView) {
super(itemView);
button = (ToggleButton) itemView.findViewById(R.id.toggle);
button.setOnclickListener(this);
}
@Override
public void onClick(View view) {
((ToggleButton) view).setChecked(true);
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
selected = pos; //store the position of the user clicked button
notifyDataSetChanged();
}
}
我的 adpater 类中的 onBindViewHolder()
public void onBindViewHolder(final ViewHolder holder, int position) {
String data = mData.get(position);
holder.id = data;
holder.button.setText(data);
holder.button.setTextOn(data);
holder.button.setTextOff(data);
if (position != selected) { //if the button is not the user chosen one
if (holder.button.isChecked()) { // and it's in 'ON' state
holder.button.toggle(); // toggle it to switch 'OFF'
}
}
【问题讨论】:
-
所以你需要一次打开一个按钮。是吗?
-
避免使用 notifyDataSetChanged(),而是尽可能使用 notifyItemChanged(pos),我认为 notifyItemChanged(int pos) 适合您的要求,因为一次单个项目处于活动状态。跨度>
标签: java android android-recyclerview toggle