How do I uncheck checkbox upon new spinner value?

不问归期 提交于 2019-12-12 05:57:44

问题


Let's say for vocSpinner value = "Combat/Service" and popSpinner value = "NSmen" and I check cb1. It will give a list. However, when I change popSpinner to "Regular/NSF" it will change to another list (which is correct) but how do I uncheck the checkbox as well without creating another data that overlay. The codes I provided doesn't seem to work and I can't work it out. All help are welcome, thanks in advance!

imgur.com/a/1wt4N [Screenshot of app]

private String[] vocSpinner;
private String[] popSpinner;

private List<Standard> standardList = new ArrayList<>();
private RecyclerView recyclerView;
private StandardsAdapter sAdapter;
private CheckBox cb1;
private CheckBox cb2;

cb1 = (CheckBox) getActivity().findViewById(R.id.pushUp);
cb2 = (CheckBox) getActivity().findViewById(R.id.sitUp);

this.vocSpinner = new String[]{
            "CDO/Diver/Gds/Fitness Spec", "Combat/Service"
    };

this.popSpinner = new String[]{
            "NSmen", "Regular/NSF", "Pre-enlistee"
    };

final Spinner v = (Spinner) getActivity().findViewById(R.id.spinner_Voc);
final Spinner p = (Spinner) getActivity().findViewById(R.id.spinner_PopGp);

ArrayAdapter<String> adapterV = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_spinner_item, vocSpinner);
    v.setAdapter(adapterV);

ArrayAdapter<String> adapterP = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_spinner_item, popSpinner);
    p.setAdapter(adapterP);

v.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            standardList.clear();
            cb1.setEnabled(true);
            cb2.setEnabled(true);
            switch (position) {
                case 0:
                    if (p.getSelectedItem().equals("NSmen")) {
                        cb1.setChecked(false);
                        cb2.setChecked(false);
                        addStandardToList("Gold - $500", ">89pts");
                        addStandardToList("Silver - $300", ">74pts");
                        addStandardToList("Incentive - $200", ">60pts");
                        addStandardToList("Pass", ">50pts");
                        sAdapter.notifyDataSetChanged();} 
                    else if (p.getSelectedItem().equals("Regular/NSF")) {
                        cb1.setChecked(false);
                        cb2.setChecked(false);
                        addStandardToList("Gold - $300", ">89pts");
                        addStandardToList("Silver - $200", ">74pts");
                        addStandardToList("Incentive", "NA");
                        addStandardToList("Pass", ">60pts");
                        sAdapter.notifyDataSetChanged();

回答1:


in your onItemSelected listener of your spinner you have done

cb1.setEnabled(true); 
cb2.setEnabled(true); 

Below that you should also do

cb1.setChecked(false); 
cb2.setChecked(false); 

also if no checkbox is checked, it is manually selecting the same values of your spinner that were previously selected so that your selection listener of spinner is called and your array is repopulated based on spinner values. For that do the following in your else -

String getSelectedItemP = p.getSelectedItem().toString();
                    p.setSelection(((ArrayAdapter<String>)p.getAdapter()).getPosition(getSelectedItemP));
                    String getSelectedItemV = v.getSelectedItem().toString();
                    v.setSelection(((ArrayAdapter<String>)p.getAdapter()).getPosition(getSelectedItemV));

So your one if condition onCheckedChanged would look like

 if (v.getSelectedItem().equals("CDO/Diver/Gds/Fitness Spec") || v.getSelectedItem().equals("Combat/Service") && p.getSelectedItem().equals("NSmen")) {
                if (cb1.isChecked() && cb2.isChecked()) {
                    addStandardToList("Gold - $500", "NA");
                    addStandardToList("Silver - $300", "NA");
                    addStandardToList("Incentive - $200", "NA");
                    addStandardToList("Pass", ">25pts");
                    sAdapter.notifyDataSetChanged();
                } else if (cb1.isChecked() || cb2.isChecked()) {
                    addStandardToList("Gold - $500", "NA");
                addStandardToList("Silver - $300", "NA");
                addStandardToList("Incentive - $200", "NA");
                addStandardToList("Pass", ">38pts");
                sAdapter.notifyDataSetChanged();
                }else{
                    // select spinner again here manually.
                    String getSelectedItemP = p.getSelectedItem().toString();
                    p.setSelection(((ArrayAdapter<String>)p.getAdapter()).getPosition(getSelectedItemP));
                    String getSelectedItemV = v.getSelectedItem().toString();
                    v.setSelection(((ArrayAdapter<String>)p.getAdapter()).getPosition(getSelectedItemV));
                }
            }



回答2:


Get the cb from the following code:

View myView = list.getChildAt(index);
CheckBox checkItem = (CheckBox) myView.findViewById(R.id.checkboxId);
checkItem.setChecked(false);


来源:https://stackoverflow.com/questions/45321885/how-do-i-uncheck-checkbox-upon-new-spinner-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!