【问题标题】:How to checkbox unchecked without action followed by checking?如何在不采取行动的情况下取消选中复选框,然后进行检查?
【发布时间】:2014-02-13 21:10:35
【问题描述】:

我想问一下如何取消选中复选框而不进行任何操作,然后选中复选框*(即不触发onCheckChangedListener()*? 我有 oncheck 操作,但我想禁用此操作以取消选中。可能吗 ?

这是我的代码:

 chb_czy_zamowic.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(
                        final CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    final Dialog d1 = new Dialog(context);
                    d1.setContentView(R.layout.ilosc);
                    d1.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                    d1.setTitle("Wybierz ilość");

                    final EditText et_Ilosc;
                    Button b_Ok;
                    Button b_Odejmij;
                    Button b_Dodaj;

                    if (buttonView.isChecked()) {

                        et_Ilosc = (EditText) d1
                                .findViewById(R.id.et_Ilosc);

                        et_Ilosc.setText(String.valueOf(i));



                        b_Dodaj = (Button) d1.findViewById(R.id.b_Dodaj);
                        b_Dodaj.setOnClickListener(new OnClickListener() {

                            @Override
                            public void onClick(View v) {
                                String zmienna_pom = et_Ilosc.getText()
                                        .toString();
                                i = Integer.valueOf(zmienna_pom);
                                setI(i);
                                int k = getI();
                                k++;

                                setI(k);
                                et_Ilosc.setText(String.valueOf(i));

                            }
                        });
                        b_Odejmij = (Button) d1
                                .findViewById(R.id.b_Odejmij);
                        b_Odejmij.setOnClickListener(new OnClickListener() {

                            @Override
                            public void onClick(View v) {
                                String zmienna_pom = et_Ilosc.getText()
                                        .toString();
                                i = Integer.valueOf(zmienna_pom);
                                setI(i);
                                i--;
                                setI(i);
                                et_Ilosc.setText(String.valueOf(i));

                            }
                        });
                        b_Ok = (Button) d1.findViewById(R.id.b_Ok);
                        b_Ok.setOnClickListener(new OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                String zmiennna_pom = et_Ilosc.getText()
                                        .toString();
                                int k = Integer.valueOf(zmiennna_pom);

                                if (k<=0 || k>=100) {

                                                                Toast t = Toast.makeText(getContext(),
                                            "Niepoprawna wartość" ,
                                            Toast.LENGTH_SHORT);
                                    t.show();
                                    view.chb_czy_zamowic.setChecked(false);
                                    d1.cancel();
                                }
                                else if( et_Ilosc.getText().toString().equals(""))
                                {
                                    Toast t = Toast.makeText(getContext(),
                                            "Uzupełnij pole ilość" ,
                                            Toast.LENGTH_SHORT);
                                    t.show();
                                    view.chb_czy_zamowic.setChecked(false);
                                    d1.cancel();
                                }
                                else
                                    view.chb_czy_zamowic.setEnabled(false);
                                    view.chb_czy_zamowic.setChecked(false); 


                                    items.get(position).Tow_ilosc -= k;
                                    Towar checkedObject = new Towar();
                                    checkedObject.Tow_ilosc = k;
                                    checkedObject.Kat_id = items
                                            .get(position).Kat_id;
                                    checkedObject.kategoria = items
                                            .get(position).kategoria;
                                    checkedObject.Tow_cena = items
                                            .get(position).Tow_cena;
                                    checkedObject.Tow_id = items
                                            .get(position).Tow_id;
                                    checkedObject.Tow_nazwa = items
                                            .get(position).Tow_nazwa;
                                    MainActivity.lista_wybranych_towarow
                                            .add(checkedObject);
                                    k = 0;
                                    setI(0);
                                    // et_Ilosc.setText("");
                                    if (MainActivity.lista_wybranych_towarow
                                            .size() > 0) {
                                        b_zatwierdz
                                                .setVisibility(View.VISIBLE);

                                        TowarZamowienie.towary_zamowione = new ArrayList<Towar>(MainActivity.lista_wybranych_towarow);

                                        Collections
                                                .copy(TowarZamowienie.towary_zamowione,
                                                        MainActivity.lista_wybranych_towarow);

                                    } else {
                                        Toast t = Toast.makeText(
                                                getContext(),
                                                "Proszę wybrać ilość",
                                                Toast.LENGTH_LONG);
                                        t.show();
                                    }



                                d1.dismiss();

                            }
                        });

                    }
                    ;
                    d1.show();

                }

            });

【问题讨论】:

  • @Poldie 添加 .setOnCheckedChangeListener 后没有任何变化
  • @Piyush Gupta 添加 .setOnCheckedChangeListener 后没有任何改变
  • @SMR 添加 .setOnCheckedChangeListener 后没有任何变化

标签: java android checkbox


【解决方案1】:

有一个属性 setClickable 与我认为可以使用的视图相关联。在 onCheckedChangeListener 中,查看它何时被取消选中,然后将其设置为 false。希望这对你有用。

【讨论】:

  • 即使不知道也让我知道。
  • 添加后 view.chb_czy_zamowic.setChecked(false);我有两个动作,一个是选中我的复选框,第二个是由取消选中引起的(我不知道它来自哪里)
  • 在 setOnCheckedChangeListener 方法中为此使用布尔参数 isChecked。
  • 另外,如果您希望在 setOnCheckedChangeListener 中实现什么,您能否详细说明?
  • 如何验证是否被用户点击?我可以从哪里获得这些数据?
【解决方案2】:

定义一些布尔字段,当您手动调整检查状态时可以将其设置为 true,而当您不手动调整检查状态时可以设置为 false,而是期望用户输入。现在侦听器可以检查此字段的值,并在标志为真时忽略“软件触发检查”。标志的最佳位置(方法字段、静态字段等)取决于整体程序设计。

确保在您手动完成复选框调整后,您的代码始终将此标志设置回 false,以免处于永久锁定状态。这是finally 声明可能合适的情况之一。

如果您仅在初始化时以编程方式选中这些框,则可以通过仅在设置状态后设置侦听器来避免这种混乱。

【讨论】:

  • 或者我可以重写一些代码并设置完全禁用字段的条件。你怎么看?
  • 如何验证是否被用户点击?我可以从哪里得到这些数据?这是某种变量还是其他什么?
  • 您是否可以控制以编程方式更改状态的代码?如果有,谁阻止在修改开始时将标志设置为 true 并在完成后设置为 false?如果(然后我误解)用户单击复选框并且您不希望触发 on change 侦听器 - 那么此类事件侦听器的目的是什么?
猜你喜欢
  • 2020-02-24
  • 2014-10-31
  • 2012-01-19
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2015-12-10
相关资源
最近更新 更多