簡體   English   中英

如何選擇所有復選框,同時單擊android中的主復選框?

[英]How to select all checkboxes, while clicking the main checkbox in android?

我需要選擇主復選框,所有其他部分復選框也被選中

我的要求是,我有一個復選框 selectAll 和其他一些復選框,通過單擊此 selectAll 復選框,必須選中所有其他復選框。單擊部分復選框時,selectAll 復選框選擇必須消失。

 selectAllCheckbox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                CheckBox cb = (CheckBox) view;
                isPartial = true;
                splitItemAdapter.selectAllItem(cb.isChecked());
                if (isFromCashPayment) {
                    if (cb.isChecked()) {
                      selectAllCheckbox.setChecked(true);
                      isitemChecked = true;




                    } else {

                        selectAllCheckbox.setChecked(false);

                        isitemChecked = false;



                    }
                }
            }
        });

您可以使用這種方式。 首先,所有復選框都在一個布局中。 然后你使用這個代碼塊。

布局文件

...
 <CheckBox android:id="@+id/allCheckbox" />
 <LinearLayout android:id="@+id/checkboxLayouts"...>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>
</LinearLayout>
...

代碼

LinearLayout checkboxLayout = findViewById(R.id.checkboxLayouts);

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
       for(int i=0 ; i < checkboxLayout.getChildCount(); i++) {
          if(checkboxLayout.getChildAt(i) instanceof CheckBox) {
             ((CheckBox) checkboxLayout.getChildAt(i)).setChecked(isChecked);
          }
       }
 }
});

注意:我無法檢查代碼。 抱歉語法錯誤。

你可以試試這個代碼:

在創建

        parent = findViewById(R.id.parent_checkbox);
        child1 = findViewById(R.id.child_checkbox_1);
        child2 = findViewById(R.id.child_checkbox_2);

        parent.setOnCheckedChangeListener(this);
        child1.setOnCheckedChangeListener(this);
        child2.setOnCheckedChangeListener(this);

OnCheckChanged

@Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkCheckBox(buttonView);
    }

復選框方法

public void checkCheckBox(View view){
     if (parent.isChecked() && view.getId() == R.id.parent_checkbox){
         child1.setChecked(true);
         child2.setChecked(true);
     }
     else if (!parent.isChecked() && view.getId() == R.id.parent_checkbox){
         if (child1.isChecked() && child2.isChecked()){
             child1.setChecked(false);
             child2.setChecked(false);
         }
     }
     else if (!parent.isChecked()){
         if (child1.isChecked() && child2.isChecked()){
             parent.setChecked(true);
         }
     }
     else if (parent.isChecked() && !child1.isChecked() || !child2.isChecked()){
         parent.setChecked(false);
     }
    }

使用此演示 kotlin 代碼檢查邏輯...

        checkBox1.setOnClickListener {
            if (checkBox2.isChecked) {
                selectAllCheckbox.isChecked = true
            }

            if (!checkBox2.isChecked || !checkBox1.isChecked) {
                selectAllCheckbox.isChecked = false
            }
        }
        checkBox2.setOnClickListener {
            if (checkBox1.isChecked) {
                selectAllCheckbox.isChecked = true
            }
            if (!checkBox1.isChecked || !checkBox2.isChecked) {
                selectAllCheckbox.isChecked = false
            }
        }
        selectAllCheckbox.setOnClickListener {
            if (selectAllCheckbox.isChecked) {
                checkBox1.isChecked = true
                checkBox2.isChecked = true
            }
            if (!selectAllCheckbox.isChecked) {
                checkBox1.isChecked = false
                checkBox2.isChecked = false
            }
        }

Select All Checkboxes 函數的實現如下,Kotlin 語言的代碼更簡單:

private val checkboxes by lazy {
    listOf(
        checkbox1,
        checkbox2,
        checkbox3,
        checkboxX
    )
}

// can implement the CompoundButton.OnCheckedChangeListener on an Activity or Fragment instead
private val onCheckedChangeListener = CompoundButton.OnCheckedChangeListener { button, isChecked ->
    if (!buttonView.isPressed)
        // note that this breaks when accessibility mode is enabled,
        // e.g. isPressed() returns false e.g. when the event is triggered by a double tap from voice assistant.
        return

    when(buttonView.id) {
        R.id.checkboxSelectAll -> {
            checkboxes.forEach { it.isChecked = isChecked }
        }
        else -> {
            if (isChecked && checkboxes.all { it.isChecked }) {
                checkboxSelectAll.isChecked = true
            } else if (!isChecked && checkboxSelectAll.isChecked) {
                checkboxSelectAll.isChecked = false
            }
        }
    }
}

// assume this code is within an Activity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.your_activity)

    checkboxSelectAll.setOnCheckedChangeListener(onCheckedChangeListener);
    checkboxes.forEach { it.setOnCheckedChangeListener(onCheckedChangeListener) }
}

*請注意,此解決方案不適用於支持輔助功能所需的應用程序。

暫無
暫無

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

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