我有一个RecyclerView
,我正在尝试使用多个选项,因此我可以对所有选定的项目执行操作。
我必须提到,在包含一个项目的片段中,我有一个单选按钮(radioButton
),一些文本和一个按钮(joinBtn
)。
我想要做的是当我点击该项目时,单选按钮将被选中,该按钮将变为可见并启用。
我的班级Group
默认为private boolean clicked = false
。
在ViewHolder
我有方法bind
:
public void bind(Group group) {
this.group = group;
mTitleTextView.setText(group.getName());
if(group.isClicked())
radioButton.setChecked(true);
else
radioButton.setChecked(false);
}
在onClick
方法中,我有我想要执行的操作:
@Override
public void onClick(View view) {
if (joinBtn.isShown()) {
joinBtn.setVisibility(View.GONE);
joinBtn.setEnabled(false);
group.setClicked(false);
}
else{
joinBtn.setVisibility(View.VISIBLE);
joinBtn.setEnabled(true);
group.setClicked(true);
}
}
我的问题是我得到的行为:
第一次点击:单选按钮被检查。
第二次点击:joinBtn出现。
第三次点击:单选按钮取消选中。
第四次点击:joinBtn消失。
如何通过一次点击将第一次和第二次点击操作发生?第3和第4个相同吗?
答案 0 :(得分:0)
尝试在notifyItemChanged(int position)
逻辑后调用适配器实例上的onClick()
。将项目的索引作为参数传递。
UI可能不会自行更新,但此功能应刷新它。
答案 1 :(得分:0)
维护一个标志,该标志将在组点击时更改
boolean isChecked = false ;
public void bind(Group group) {
this.group = group;
mTitleTextView.setText(group.getName());
if(isChecked)
isChecked = false;
radioButton.setChecked(false);
else
isChecked = true;
radioButton.setChecked(true);
}
然后
@Override
public void onClick(View view) {
if (isChecked) {
joinBtn.setVisibility(View.GONE);
joinBtn.setEnabled(false);
group.setClicked(false);
}
else{
joinBtn.setVisibility(View.VISIBLE);
joinBtn.setEnabled(true);
group.setClicked(true);
}
}
答案 2 :(得分:0)
显然问题是因为单选按钮。我做的第一件事是使用ImageView
而不是单选按钮。在ImageView
我使用(需要时)两张图片中的一张:选中或未选中。
在bind
方法中我只需要joinBtn.setVisibility(View.GONE);
和radioBtnImage.setImageResource(R.drawable.radio_btn_unselected);
在我使用的onClick
方法中:
if (joinBtn.isShown()) {
joinBtn.setVisibility(View.GONE);
joinBtn.setClickable(false);
radioBtnImage.setImageResource(R.drawable.radio_btn_unselected);
}
else{
joinBtn.setVisibility(View.VISIBLE);
joinBtn.setClickable(true);
radioBtnImage.setImageResource(R.drawable.radio_btn_selected);
}
这是为我做的!