簡體   English   中英

更改適用於第二次點擊

[英]Changes apply on the second tap

我有一個RecyclerView並且正在嘗試進行多次選擇,以便可以對所有選中的項目執行操作。 我不得不提到在包含一個項目的片段中,我有一個單選按鈕( radioButton ),一些文本和一個按鈕( joinBtn )。

我想做的是,當我單擊該項目時,單選按鈕將變為選中狀態,並且該按鈕將變為可見並啟用。

默認情況下,我的班級Groupprivate 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出現。
第三次點擊:取消選中單選按鈕。
第4次點擊:joinBtn消失。

我如何使第一次和第二次點擊之間的動作一次發生? 第三和第四相同嗎?

嘗試在onClick()邏輯之后在適配器實例上調用notifyItemChanged(int position) 將項目的索引作為參數傳遞。

UI可能不會自行更新,但是此功能應刷新它。

保留一個標志,該標志將在組單擊時發生變化

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

顯然問題出在單選按鈕。 我做的第一件事是使用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);
            }

這為我做到了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM