android add checkbox dynamically

14,902

Solution 1

LinearLayout featuresTable = (LinearLayout) findViewById(R.id.failure_reasonslist);
// use loop 
CheckBox feature1 = new CheckBox(this);
featuresTable.addView(feature1 );

Solution 2

Add CheckBox Dynamically

LinearLayout my_layout = (LinearLayout)findViewById(R.id.my_layout);
// Add Checkbox Dynamically
CheckBox checkBox = new CheckBox(mContext);
checkBox.setText(ETnewcheckbox.getText().toString()+""); 
checkBox.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        String msg = "You have " + (isChecked ? "checked" : "unchecked") + " this Check it Checkbox.";
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
    } 
}); 

// Add Checkbox to LinearLayout 
if (my_layout != null) { 
    my_layout.addView(checkBox); 
} 
Share:
14,902
developerXXX
Author by

developerXXX

Updated on August 02, 2022

Comments

  • developerXXX
    developerXXX almost 2 years

    The following are my layout xmls. Now we are have a limited number (seven) of check boxes in the layout (listitem.xml). And we are adding it in a linear layout.

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="#FFFFFF"
       >
    
        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="21dp"
            android:layout_marginTop="38dp" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/linearLayout1"
                android:layout_alignLeft="@+id/linearLayout1"
                android:text="TESTER : "
                android:textColor="#000000" />
    
            <AutoCompleteTextView
                android:id="@+id/tester_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:capitalize="characters" 
                android:textColor="#000000">
    
                <requestFocus />
            </AutoCompleteTextView>
    
        </LinearLayout>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/linearLayout1"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="19dp"
            android:text="APPS TO TEST : "
            android:textAppearance="?android:attr/textAppearanceLarge" 
            android:textColor="#000000"/>
    
    
    
    
        <View
            android:id="@+id/view1"
            android:layout_width="wrap_content"
            android:layout_height="1dp"
            android:layout_below="@+id/textView2"
            android:background="#CCCCCC" 
            android:layout_marginBottom="5dp"/>
    
        <ListView
            android:id="@+id/apps_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/view1" 
            android:dividerHeight="5dp">
        </ListView>
    
        <Button
            android:id="@+id/refreshBtn"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_alignBottom="@+id/textView2"
            android:layout_alignParentLeft="true"
            android:text="Refresh" />
    
    </RelativeLayout>
    

    listitem.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/app_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="70"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#000000" />
    
            <Button
                android:id="@+id/launch_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:layout_weight="20"
                android:text="LAUNCH" />
        </LinearLayout>
    
        <RadioGroup
            android:id="@+id/status_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <RadioButton
                android:id="@+id/pass_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="PASS"
                android:textColor="#000000" />
    
            <RadioButton
                android:id="@+id/fail_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="FAIL"
                android:textColor="#000000" />
        </RadioGroup>
    
        <LinearLayout
            android:id="@+id/failure_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:focusableInTouchMode="false"
                android:gravity="center"
                android:text="FAILURE REASONS"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#000000" />
    
            <LinearLayout
                android:id="@+id/failure_reasonslist"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:focusableInTouchMode="false"
                android:orientation="vertical" >
    
                <CheckBox
                    android:id="@+id/failure_Sound"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_GPS"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_Display"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_Network"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_Rotation"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_Microphone"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
    
                <CheckBox
                    android:id="@+id/failure_Others"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textColor="#000000" />
            </LinearLayout>
        </LinearLayout>
    
        <LinearLayout
            android:id="@+id/lineatlayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="DESCRIPTION : "
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#000000" />
    
            <EditText
                android:id="@+id/description_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:clickable="true"
                android:ems="10"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:inputType="textMultiLine"
                android:textColor="#000000" >
            </EditText>
        </LinearLayout>
     <LinearLayout
            android:id="@+id/lineatlayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        <Button
            android:id="@+id/submit_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="  SUBMIT " />
        <Button
            android:id="@+id/uninstall_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="UNINSTALL" />
        </LinearLayout>
    
        <!-- </RelativeLayout> -->
    
    </LinearLayout>
    

    But as per the new requirement we need to add the check boxes dynamically. Like need to fetch the options from the API call and convert it as check boxes in the view. I spent lots of time in it. Can someone suggest a method to solve this.

    Our layout should be like this. In a list view we are displaying employee details and for each employee record the qualification should be loaded from the API call or database.

          [Reviewer Name (Editable)]       
                   Employee Lest           
    ---------------------------------------
    Employee1                    [Click Me]
    
    Male (0)          Female ( )
    Salary : [5999 (editable)]
    Qualification
    [X]BA
    [ ]BSc
    [ ]Matriculation
    [ ]Other
    [Submit Button]
    ---------------------------------------
    Employee2                    [Click Me]
    
    Male (0)          Female ( )
    Salary : [5999 (editable)]
    Qualification
    [X]BA
    [ ]BSc
    [ ]Matriculation
    [ ]Other
    [Submit Button]
    ---------------------------------------
    Employee3                    [Click Me]
    
    Male (0)          Female ( )
    Salary : [5999 (editable)]
    Qualification
    [X]BA
    [ ]BSc
    [ ]Matriculation
    [ ]Other
    [Submit Button]
    ---------------------------------------
    

    Source code

    private class ListAdapters extends ArrayAdapter<ApplicationBean> {
        private ArrayList<ApplicationBean> items;
        private int position;
    
        public ListAdapters(Context context, int textViewResourceId,
                ArrayList<ApplicationBean> mTitleList) {
            super(context, textViewResourceId, mTitleList);
            this.items = mTitleList;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            this.position = position;
            if (v == null) {
                LayoutInflater inflater = (LayoutInflater) mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = inflater.inflate(R.layout.applicationlistitem, null);
            }
    
            final ApplicationBean o = (ApplicationBean) items.get(position);
    
            if (o != null) {
    
                txtAppName = (TextView) v.findViewById(R.id.app_name);
                txtAppName.setText("" + o.getAppName());
                launchButton = (Button) v.findViewById(R.id.launch_btn);
                launchButton.setTag(position);
                launchButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
    
                        final PackageManager pm = mContext.getPackageManager();
                        Intent LaunchIntent = pm
                                .getLaunchIntentForPackage(items
                                        .get(Integer.parseInt(v.getTag()
                                                .toString())).getPname());
                        mContext.startActivity(LaunchIntent);
    
                    }
                });
                final LinearLayout failure_reasonslist = (LinearLayout) v
                        .findViewById(R.id.failure_reasonslist);
    
                rdgPassFail = (RadioGroup) v.findViewById(R.id.status_group);
                rdgPassFail.setTag(position);
    
                RadioButton passBtn = (RadioButton) v
                        .findViewById(R.id.pass_btn);
                passBtn.setTag(position);
                RadioButton failbtn = (RadioButton) v
                        .findViewById(R.id.fail_btn);
                failbtn.setTag(position);
    
                rdgPassFail
                        .setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                            @Override
                            public void onCheckedChanged(RadioGroup group,
                                    int checkedId) {
                                ApplicationBean o = (ApplicationBean) items
                                        .get(Integer.parseInt(group.getTag()
                                                .toString()));
    
                                switch (checkedId) {
                                case R.id.fail_btn:
                                    Log.e("Fail button", "Clicked");
                                    o.setFailState(true);
                                    o.setPassState(false);
                                    numOptions = 0;
                                    Log.e("Fail button--1", "Clicked");
    
                                    break;
                                case R.id.pass_btn:
                                    Log.e("Pass button", "Clicked");
    
                                    o.setFailState(false);
                                    o.setPassState(true);
                                    Log.e("Pass button-----1", "Clicked");
    
                                    break;
                                }
                                items.set(Integer.parseInt(group.getTag()
                                        .toString()), o);
                            }
    
                        });
    
                LinearLayout featuresTable = (LinearLayout) v.findViewById(R.id.failure_reasonslist);
    
                // use loop CheckBox feature1 = new CheckBox(this); 
                for(int i = 0; i<=5; i++) {
                    CheckBox feature1 = new CheckBox(this.getContext());
                    featuresTable.addView(feature1);
                }
    
    
    
    
                txtDescription = (EditText) v
                        .findViewById(R.id.description_text);
                txtDescription.setTag(position);
                if (txtDescription.isFocused()) {
                    InputMethodManager inputManager = (InputMethodManager) mContext
                            .getSystemService(INPUT_METHOD_SERVICE);
                    inputManager.restartInput(txtDescription);
                }
    
                txtDescription
                        .setOnFocusChangeListener(new View.OnFocusChangeListener() {
    
                            @Override
                            public void onFocusChange(View v, boolean hasFocus) {
                                if (!hasFocus) {
    
                                    final EditText Caption = (EditText) v;
                                    o.setDescription(Caption.getText()
                                            .toString());
    
                                }
    
                            }
                        });
                uninstallButton = (Button) v.findViewById(R.id.uninstall_btn);
                uninstallButton.setTag(position);
                // uninstallButton.setVisibility(View.INVISIBLE);
                o.setUninstallVisible(false);
                uninstallButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        Uri packageUri = Uri.parse("package:"
                                + items.get(
                                        Integer.parseInt(v.getTag().toString()))
                                        .getPname());
                        Intent uninstallIntent = new Intent(
                                Intent.ACTION_DELETE, packageUri);
                        uninstallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(uninstallIntent);
                        mTitleList.remove(items.get((Integer) v.getTag()));
    
                        mListView.setAdapter(new ListAdapters(mContext,
                                R.id.app_name, mTitleList));
                        ((BaseAdapter) mListView.getAdapter())
                                .notifyDataSetChanged();
                        isUninstallclicked = true;
    
                    }
                });
    
                submitButton = (Button) v.findViewById(R.id.submit_btn);
                submitButton.setTag(txtDescription);
                submitButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        EditText tv = (EditText) v.getTag(); // get edittext
                                                                // object
    
                        txtDescription = tv;
                        if (txtTesterName.getText().toString().equals("")) {
                            showDialog("Please enter the name of tester",
                                    mContext);
                        } else if (numOptions == 0) {
                            showDialog("Please select failure reason", mContext);
                        } else if (tv.getText().toString().equals("")) {
                            showDialog("Please enter the description", mContext);
                        } else if (!isNetworkAvailable()) {
    
                            showDialog(
                                    "No network connection.Report won't be submitted",
                                    mContext);
                        } else {
    
                            if (!o.isUninstallVisible()) {
                                uninstallButton.setVisibility(View.VISIBLE);
                                o.setUninstallVisible(true);
                                mListView.invalidate();
                            }
                            PostRequest p = new PostRequest(Integer.parseInt(tv
                                    .getTag().toString()));
                            p.execute();
    
                        }
                    }
    
                });
    
            }
            return v;
        }