3

Hear i use Custom ListView with TextView and CheckBox. But i want that Single Selection in CheckBox At a time One CheckBox Selected then other one is Deselect using BaseAdapter but This code not Work Properly .. Please Give me Suggestion ..thnks

@Override
public View getView(final int position, View view, ViewGroup parent) {
    Integer selected_position = -1;
    holder = new ViewHolder();
    final Items itm = rowItem.get(position);
    LayoutInflater layoutInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (view == null) {

        view = layoutInflater.inflate(R.layout.activity_custom_list,
                parent, false);

        holder.tvItemName = (TextView) view.findViewById(R.id.textView1);
        holder.check = (CheckBox) view.findViewById(R.id.checkBox1);
        view.setTag(holder);

    } else {
        holder = (ViewHolder) view.getTag();
    }

    holder.tvItemName.setText(itm.getItems());

    if (position == selected_position)
        holder.check.setChecked(true);
    else
        holder.check.setChecked(false);

    holder.check.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (holder.check.isChecked()) {
                selected_position = position;
            } else {
                selected_position = -1;
            }
            notifyDataSetChanged();

        }
    });

    return view;
}}
Darshan Soni
  • 319
  • 3
  • 14
  • Try using conditions so onClick of your check box make other check boxes false eg: otherCheckBox.setEnabled(false); – AndroidNewBee Jan 22 '16 at 07:12
  • dont wont to select single row of Listview .. wont to select single checkbox in listview – Darshan Soni Jan 22 '16 at 07:35
  • You want to select one checkbox and if you then select another one the first should automatically be "unselected"? – Bö macht Blau Jan 22 '16 at 10:41
  • ya... exectly i want this... but that above code not work properly.. i use this condition in checkbox onCheckedChangeListener() then after all checkbox is disable ... no one can check... thats the problem – Darshan Soni Jan 22 '16 at 11:08
  • Finally I got the solution... i post Full Code in Answer .. Check it..nd i hope this is Helpful to all.... this code Work Properly...... thank you.. – Darshan Soni Jan 22 '16 at 12:57

2 Answers2

2

use Custom List-View with Text-View And Check-Box With Single Selection of Check Box So many try then finally i got the Solution I hope it is Useful Code to you All... This code Help you to create custom List-view with Text-view and Check-box then you select one check-box and if you select another one the first should automatically be Deselected.....Thank You...

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.listviewdemo2.MainActivity" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />
</RelativeLayout>

activity_custom_list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.listviewdemo2.CustomListActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/darker_gray" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="4dp"
        android:layout_weight="0.39"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="150dp"
        android:layout_marginTop="4dp"/>
</LinearLayout> </LinearLayout>

String.xml

<string-array name="name">
   <item>Laptop</item>
    <item>Mobile</item>
    <item>Desktop</item>
    <item>TV</item>
    <item>Pendrive</item>
    <item>Router</item>
    <item>Notebook</item>
    <item>Tablet</item>
    <item>I-pad</item>
    <item>Bluetooth</item>
    <item>HomeTheator</item>
</string-array>

MainActivity.java

String[] ItemName;
List<Items> rowItem;
ListView list;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rowItem = new ArrayList<Items>();
    ItemName = getResources().getStringArray(R.array.name);

    for(int i = 0 ; i < ItemName.length ; i++)
    {
        Items itm = new Items(ItemName[i]);
        rowItem.add(itm);
    }

    list = (ListView) findViewById(R.id.listView1);
    CustomListActivity adapter = new CustomListActivity(this, rowItem);
    list.setAdapter(adapter);
}

Items.java

public class Items {

private String items;
 private boolean selected;


public Items(String items) {

    this.items = items;

}

public String getItems() {

    return items;
}

public void setItemName(String name) {

    this.items = name;
}
public boolean getSelected() {
    return selected;
}

public boolean setSelected(Boolean selected) {
    return this.selected = selected;
}}

CustomListActivity.java

public class CustomListActivity extends BaseAdapter {

Context context;
List<Items> rowItem;
View listView;
boolean checkState[];

ViewHolder holder;

public CustomListActivity(Context context, List<Items> rowItem) {

    this.context = context;
    this.rowItem = rowItem;
    checkState = new boolean[rowItem.size()];

}

@Override
public int getCount() {

    return rowItem.size();
}

@Override
public Object getItem(int position) {

    return rowItem.get(position);

}

@Override
public long getItemId(int position) {

    return rowItem.indexOf(getItem(position));

}

public class ViewHolder {
    TextView tvItemName;
    CheckBox check;
}

@Override
public View getView(final int position, View view, ViewGroup parent) {

    holder = new ViewHolder();
    final Items itm = rowItem.get(position);
    LayoutInflater layoutInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (view == null) {

        listView = new View(context);
        listView = layoutInflater.inflate(R.layout.activity_custom_list,
                parent, false);

        holder.tvItemName = (TextView) listView
                .findViewById(R.id.textView1);
        holder.check = (CheckBox) listView.findViewById(R.id.checkBox1);
        listView.setTag(holder);

    } else {
        listView = (View) view;
        holder = (ViewHolder) listView.getTag();
    }

    holder.tvItemName.setText(itm.getItems());

    holder.check.setChecked(checkState[position]);

    holder.check.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            for(int i=0;i<checkState.length;i++)
            {
                if(i==position)
                {
                    checkState[i]=true;
                }
                else
                {
                    checkState[i]=false;
                }
            }
            notifyDataSetChanged();

        }
    });
    return listView;
}}

Show The Output :-

enter image description here

Luka Kerr
  • 4,161
  • 7
  • 39
  • 50
Darshan Soni
  • 319
  • 3
  • 14
0

If you want a custom ListView with single choice CheckBox you can use something like this:

https://stackoverflow.com/a/12003125/5778152

Community
  • 1
  • 1
Nicolas Cortell
  • 659
  • 4
  • 16
  • But i dont want to use Button Like CkeckAll Or ClearAll ..i want check one checkbox selected at a time.. E.g one checkBox selected then i check another one then previous is uncheck and i use BaseAdapter – Darshan Soni Jan 22 '16 at 07:22