0
votes

1.here all my code. 2.for create dynamic checkbox for check or uncheck all checkboxes
{ final String[][] itemContainer = new String[30][7]; TableLayout tblItemDetail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item_code_release); tblItemDetail = (TableLayout)findViewById(R.id.tblItemDetail);
try { sqlItem = ""; sqlItem = "SELECT * from itm_mst"; rs = objDbConnect.getResultSet(sqlItem); if (rs.next()) { int i1 = 1; do { itemContainer[itemCount][0]=Integer.toString(i1++); itemContainer[itemCount][6]="N"; //checkbox value itemCount++; } while (rs.next()); tblItemDetail.removeAllViews(); if (itemCount > 0) {

CheckBox tvchkall = new CheckBox(ItemCodeRelease.this);  //header row checkbox for ckeck or uncheck all checkbox
tvchkall.setGravity(Gravity.CENTER);
tvchkall.setPadding(20, 0, 20, 0);
tvchkall.setText("Y");
headerRow1.addView(tvchkall);
tvchkall.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(buttonView.isChecked())
 {                              
 for(int a = 0 ; a < itemContainer.length ; a++)
 {
   for(int b = 0 ; b < itemContainer[a].length ; b++)
    {
       CheckBox chkb = (CheckBox)tblItemDetail.findViewById(a);
       if ( chkb == null )
       continue;
       chkb.setChecked(true);
   Log.i("Checkbox serrch","checked  "+chkb.getText()+"ID +chkb.getId());
   if(a == chkb.getId())
    {
      itemContainer[a][6] = "Y";
    }
      else
    {
     Log.i("Checkbox serrch","unchecked"+chkb.getText()+"ID  "+chkb.getId());
    itemContainer[a][6] = "N";
     }}}}
     });
     tblItemDetail.addView(headerRow1);
     int alternateRow1 = 0;
      for (i = 0; i < itemCount; i++) {
       TableRow bodyRow1 = new TableRow(ItemCodeRelease.this);
       if (alternateRow1 % 2 == 0) {
          bodyRow1.setBackgroundResource(R.color.statusalternateRow);
      }
      else {
      bodyRow1.setBackgroundResource(R.color.statusRow);
          }
      final CheckBox cb1 = new CheckBox(ItemCodeRelease.this);   //body row of checkbox
      cb1.setId(i);
      cb1.setGravity(Gravity.CENTER);
       cb1.setPadding(20, 0, 20, 0);
      bodyRow1.addView(cb1);
      cb1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          // TODO Auto-generated method stub
         for(int a = 0 ; a < itemContainer.length ; a++)
            {
             for(int b = 0 ; b < itemContainer[a].length ; b++)
              {
                   if(buttonView.isChecked())
                   {
                     Log.i("Checkbox serrch","checked  "+buttonView.getText()+"ID  "+buttonView.getId());
                    if(a == buttonView.getId())
                    {
                        itemContainer[a][6] = "Y";
                          continue;
                     }}
                     else
                    {
                       itemContainer[a][6] = "N";
                      }}}}
                     });
                     bodyRow1.addView(tvBodySRNo1);
                     tblItemDetail.addView(bodyRow1);       
                     alternateRow1++;
               }}} 
               } catch (Exception e) {      e.printStackTrace();                      }}
2
thank you in advance...reply as soon as possibleBhhruguni
I see your code. But I don't see your question.Phantômaxx
What is the problem with this code?Uma Kanth
i have created checkbox in table layout dynamically and add in header checkbox for chek or uncheck all checkboxes but my code is not woeking and error occured at CheckBox chkb = (CheckBox) tblItemDetail.findViewById(a);Bhhruguni
Please put that info in your post. Not in a comment. Explain better what is happening and is not happening.greenapps

2 Answers

0
votes

Update [26-01-2016] : You can follow this to Check/UnCheck Dynamically created CheckBoxes.

Inside onCreate(Bundle bundle) { ... } add this : Few Notes :

  1. You need to give the Base Layout an ID if you use:

    setContentView(R.layout.new_layout);
    

    That is, when you set ContentView using layout xml.

  2. You may need to create dummy ids in ids.xml in values folder for usability.
  3. Please keep in mind that you can apply a similar logic for Layout created dynamically instead of using layout xml.
  4. Please keep in mind that you can use similar logic for other Compound Buttons instead of CheckBox.

    //Get Base Layout
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.base_layout);
    
    //Create new CheckBox
    CheckBox mainCheckBox = new CheckBox(this);
    //Create a new ids.xml in values folder and add dummy id there. Than use that dummy id for dynamically created views
    mainCheckBox.setId(R.id.main_cb);
    //Give a name to it
    mainCheckBox.setText(R.string.mainCB);
    //Add it to Base layout
    linearLayout.addView(mainCheckBox, 0);
    
    //Create other CheckBoxes...
    CheckBox[] checkBoxes = new CheckBox[5];
    for (int i = 0; i < 5; i++) {
        checkBoxes[i] = new CheckBox(this);
        checkBoxes[i].setText(String.format(Locale.getDefault(), "Child CheckBox %d", i + 1));
        checkBoxes[i].setId(i+101);
        linearLayout.addView(checkBoxes[i], i+1);
    }
    
    //Creating each checkbox individually:
    CheckBox checkBox = new CheckBox(this);
    checkBox.setText("Child CheckBox 6");
    //Either add an integer value
    checkBox.setId(106);
    /*
    * Or else use a dummy id
    * checkBox.setId(R.id.child_cb);
    */
    linearLayout.addView(checkBox, 6);
    
    //Set listener to main CheckBox
    mainCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //Create an array of integer type to store all ids of child CBs
            int[] ids = new int[] { 101, 102, 103, 104, 105, 106 };
                /*
                 * You can also do
                 * int[] ids = new int[] { 101, 102, 103, 104, 105, R.id.child_cb };
                 */
            if(isChecked) {
                Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_SHORT).show();
                checkChildCBs(ids);
            } else {
                Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_SHORT).show();
                unCheckChildCBs(ids);
            }
        }
    });
    

Method to check all CheckBoxes

    private void checkChildCBs(int[] ids) {
        //Create CheckBox array of same size as that of ids
        CheckBox[] checkBoxes = new CheckBox[ids.length];
        //Run loop to check them
        for (int i = 0; i < ids.length; i++) {
            checkBoxes[i] = (CheckBox) findViewById(ids[i]);
            checkBoxes[i].setChecked(true);
        }
    }

Method to unCheck all CheckBoxes

    private void unCheckChildCBs(int[] ids) {
        //Create CheckBox array of same size as that of ids
        CheckBox[] checkBoxes = new CheckBox[ids.length];
        //Run loop to unCheck them
        for (int i = 0; i < ids.length; i++) {
            checkBoxes[i] = (CheckBox) findViewById(ids[i]);
            checkBoxes[i].setChecked(false);
        }
    }

/res/values/ids.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item type="id" name="main_cb" />
        <item type="id" name="child_cb" />
    </resources>

Update : You can follow the below code to enable/disable Dynamically created CheckBoxPreferences.

Create a new file named preferences.xml in /res/xml/ directory :

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="pref_screen">
</PreferenceScreen>

Than in your PreferenceActivity in onCreate() :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Add preference xml file from /res/xml/
    addPreferencesFromResource(R.xml.preferences);
}

Now we will create CheckBoxPreference dynamically :

// Get PreferenceScreen using the key as stated in preferences.xml
PreferenceScreen prefScreen = (PreferenceScreen) findPreference("pref_screen");

// Now create a CheckBoxPreference array. The size of the array will be the number of required CheckBoxPreferences.
CheckBoxPreference[] cbPrefs = new CheckBoxPreference[5]; // You can set any number you want. This will allow you to create 5 CheckBoxPreferences.

// Run loop to create CheckBoxPreferences and add them to the PreferenceScreen.
for (int  i = 0; i < cbPrefs.length; i++) {
    cbPrefs[i] = new CheckBoxPreference(getActivity());
    cbPrefs[i].setTitle("Dynamically created multiple Pref " + (i+1));
    cbPrefs[i].setKey("multiple_dynamic_pref_key_" + (i+1));
    prefScreen.addPreference(cbPrefs[i]); // Adds the newly created CheckBoxPreference to the PreferenceScreen
}
/*
 IF you want, you can also create new CheckBoxPreference individually like this :
 cbPrefs[0] = new CheckBoxPreference(getActivity());
 cbPrefs[0].setTitle("My Preference");
 cbPrefs[0].setKey("my_pref_key");
 prefScreen.addPreference(cbPrefs[0]);
 cbPrefs[1] = new CheckBoxPreference(getActivity());
 cbPrefs[1].setTitle("Some Name");
 cbPrefs[1].setKey("some_pref_key");
 prefScreen.addPreference(cbPrefs[1]);
 and so on and so forth...
*/

// Now create and add a Preference to the PreferenceScreen
Preference preference = new Preference(getActivity());
preference.setTitle("Preference");
prefScreen.addPreference(preference);

// Now set onPreferenceClickListener to newly created preference.
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        String[] prefKeys = new String[] {"multiple_dynamic_pref_key_1", "multiple_dynamic_pref_key_2", 
        "multiple_dynamic_pref_key_3", "multiple_dynamic_pref_key_4", 
        "multiple_dynamic_pref_key_5"};
        changePrefsState(prefKeys, cbPrefs);
        return false;
    }
});

Finally your onCreate() will look like this :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Add preference xml file from /res/xml/
    addPreferencesFromResource(R.xml.preferences);

    // Get PreferenceScreen using the key as stated in preferences.xml
    PreferenceScreen prefScreen = (PreferenceScreen) findPreference("pref_screen");

    // Now create a CheckBoxPreference array. The size of the array will be the number of required CheckBoxPreferences.
    CheckBoxPreference[] cbPrefs = new CheckBoxPreference[5]; // You can set any number you want. This will allow you to create 5 CheckBoxPreferences.

    // Run loop to create CheckBoxPreferences and add them to the PreferenceScreen.
    for (int  i = 0; i < cbPrefs.length; i++) {
        cbPrefs[i] = new CheckBoxPreference(getActivity());
        cbPrefs[i].setTitle("Dynamically created multiple Pref " + (i+1));
        cbPrefs[i].setKey("multiple_dynamic_pref_key_" + (i+1));
        prefScreen.addPreference(cbPrefs[i]); // Adds the newly created CheckBoxPreference to the PreferenceScreen
    }

    // Now create and add a Preference to the PreferenceScreen
    Preference preference = new Preference(getActivity());
    preference.setTitle("Preference");
    PreferenceScreen.addPreference(preference);

    // Now set onPreferenceClickListener to newly created preference.
    preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            String[] prefKeys = new String[] {"multiple_dynamic_pref_key_1", "multiple_dynamic_pref_key_2", 
            "multiple_dynamic_pref_key_3", "multiple_dynamic_pref_key_4", 
            "multiple_dynamic_pref_key_5"};
            changePrefsState(prefKeys, cbPrefs);
            return false;
        }
    });
}

// This function is called when you click on preference to check/uncheck CheckBoxPrefs.
private void changePrefsState(String[] prefKeys, CheckBoxPreference[] checkBoxPreferences) {
    try {
        for (int i = 0; i < prefKeys.length; i++) {
            checkBoxPreferences[i] = (CheckBoxPreference) findPreference(prefKeys[i]);
            // Check if CheckBozPreference is Checked. If yes than unCheck it else Check it
            if (checkBoxPreferences[i].isChecked())
                checkBoxPreferences[i].setChecked(false);
            else
                checkBoxPreferences[i].setChecked(true);
        }
    } catch(Exception e) {
        Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }
}

Old :

    private void someFunction() {    
        String[] prefKeys = new String[] {"pref_key_1", "pref_key_2", "pref_key_3", "pref_key_4", "pref_key_5"};
        CheckBoxPreference[] cbPrefs = new CheckBoxPreference[prefKeys.length];
        changePrefsState(prefKeys, cbPrefs);
    }

    private void changePrefsState(String[] prefKeys, CheckBoxPreference[] checkBoxPreferences) {
        try {
            for (int i = 0; i < prefKeys.length; i++) {
                checkBoxPreferences[i] = (CheckBoxPreference) findPreference(prefKeys[i]);
                // Check if CheckBozPreference is Checked. If yes than unCheck it else Check it
                if (checkBoxPreferences[i].isChecked())
                    checkBoxPreferences[i].setChecked(false);
                else
                    checkBoxPreferences[i].setChecked(true);
            }
        } catch(Exception e) {
            Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

The above example works for both Dynamically created preferences and XML defined preferences. You just need to pass the keys and pref type. You can make different changePrefsState(arg1, arg2) { ... } for different Preference types.

0
votes

main checkbox for check all checkbox.

  CheckBox tvchkall = new CheckBox(ItemCodeRelease.this);
  tvchkall.setId(101);
  tvchkall.setOnClickListener(getOnClickDoSomething(tvchkall));

listner that check all checkbox which is dynamicall creater.

View.OnClickListener getOnClickDoSomething(final CheckBox chk) {
    return new View.OnClickListener() {
        public void onClick(View v) {       

            if (chk.getId() == 101) {
                if (chk.isChecked()) {
                    for (int a = 1; a < tblItemDetail.getChildCount(); a++) {
                        itemContainer[a][6] = "Y";                      
                        CheckBox cb1 = (CheckBox) ((TableRow) tblItemDetail.getChildAt(a)).getChildAt(1);
                        cb1.setChecked(true);
                    }
                } else {
                    for (int a = 1; a < tblItemDetail.getChildCount(); a++) {
                        itemContainer[a][6] = "N";                          
                        CheckBox cb11 = (CheckBox) ((TableRow) tblItemDetail.getChildAt(a)).getChildAt(1);
                    }
                }
            } else {
                if (chk.isChecked()) {
                    for (int a = 0; a < itemContainer.length; a++) {
                        for (int b = 0; b < itemContainer[a].length; b++) {
                            if (a == chk.getId()) {
                                itemContainer[a][6] = "Y";                                  
                            }
                        }
                    }
                } else {
                    for (int a = 0; a < itemContainer.length; a++) {
                        for (int b = 0; b < itemContainer[a].length; b++) {
                            if (a == chk.getId()) {
                                itemContainer[a][6] = "N";                                  
                            }                               
                        }
                    }
                }
            }

        }
    };
}