更改适用于第二次点击

时间:2017-10-05 10:21:15

标签: android android-recyclerview

我有一个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个相同吗?

3 个答案:

答案 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);
            }

这是为我做的!