Note that there are some explanatory texts on larger screens.

plurals
  1. POCheckBox in a row of ListView
    text
    copied!<p>How do I override a CheckBox's default <code>onClick()</code> behaviour?</p> <p><strong>Use case</strong> I want the checkBox to reflect some boolean status of the object being rendered in the row view. When the user clicks on the row (including the checkBox), some process will run which may alter the objects state (the boolean variable).</p> <p>Now how do I prevent the CheckBox's default onClick behaviour from kicking in? In other words I want <code>CheckBox.onClick()</code> to call <code>theCustomAdapter.onItemClick()</code>. How do I achieve this?</p> <p>On a second thought, is there any such widget object which just displays an on/off status &amp; does not implement Clickable? </p> <p><strong>Custom Adapter</strong></p> <pre><code>public class UserListViewAdapter extends ArrayAdapter&lt;User&gt; implements AdapterView.OnItemClickListener { private final Context context; private final List&lt;User&gt; users; public UserListViewAdapter(Context context, int resource, List&lt;User&gt; users) { super(context, resource, users); this.context = context; this.users = users; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row = layoutInflater.inflate(R.layout.user, parent, false); // set the loggedIn? isCurrent? radio buttons CheckBox checkBox = (CheckBox) row.findViewById(R.id.isLoggedIn); checkBox.setChecked(users.get(position).isLoggedIn()); checkBox = (CheckBox) row.findViewById(R.id.isCurrent); checkBox.setChecked(users.get(position).isCurrent()); // fill the user name TextView textView = (TextView) row.findViewById(R.id.userName); textView.setText(users.get(position).getUserName()); // fill the user id textView = (TextView) row.findViewById(R.id.userId); textView.setText(users.get(position).getUserId()); // return the row return row; } // @Override public void onItemClick(AdapterView&lt;?&gt; adapterView, View view, int i, long l) { Log.i("Clicked", adapterView.toString()); Toast.makeText(this.context, "Clicked! "+l, Toast.LENGTH_LONG).show(); } } </code></pre> <p><strong>Custom Row View</strong></p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:clickable="true"&gt; &lt;CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/isLoggedIn" android:padding="4dp" android:gravity="center" android:focusable="false" android:clickable="false" android:focusableInTouchMode="false"/&gt; &lt;CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/isCurrent" android:padding="4dp" android:gravity="center" android:focusable="false" android:clickable="false" android:focusableInTouchMode="false"/&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/userName" android:padding="4dp" android:gravity="left" android:focusable="false" android:clickable="false" android:focusableInTouchMode="false"/&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/userId" android:padding="4dp" android:gravity="left" android:focusable="false" android:clickable="false" android:focusableInTouchMode="false"/&gt; &lt;/LinearLayout&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload