Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3698914
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 19, 20262026-05-19T05:02:22+00:00 2026-05-19T05:02:22+00:00

I have list view with custom row layout (list_row.xml) that contains CheckBox element: <TableLayout

  • 0

I have list view with custom row layout (list_row.xml) that contains CheckBox element:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal"
    android:weightSum="1.0">
    <TableRow>
        <TextView android:id="@+id/name"
            android:layout_weight=".85"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:text="sample"
            android:textSize="24sp">
        </TextView>
        <CheckBox android:id="@+id/enabled"
            android:layout_weight=".15"
            android:layout_width="0dip"
            android:layout_height="wrap_content" 
            android:focusable="false">
        </CheckBox>
    </TableRow>
</TableLayout>

In my list activity I’ve got ListRowAdapter:

private static class ListRowAdapter extends ArrayAdapter<ListRow> implements
        CompoundButton.OnCheckedChangeListener {

    private List<ListRow> items;
    private LayoutInflater vi;
    private SparseBooleanArray mCheckStates;

    public ListRowAdapter(Context context, int textViewResourceId,
            List<ListRow> objects) {
        super(context, textViewResourceId, objects);
        this.items = objects;
        this.vi = LayoutInflater.from(context);
        this.mCheckStates = new SparseBooleanArray(objects.size());
        for(int i=0;i<mCheckStates.size();i++){
            mCheckStates.put(i,items.get(i).isEnabled());
        }
        Log.i("VIEW", "constructor");
    }

    public boolean isChecked(int position) {
        return mCheckStates.get(position, false);
    }

    public void setChecked(int position, boolean isChecked) {
        mCheckStates.put(position, isChecked);
        items.get(position).setEnabled(isChecked);
        notifyDataSetChanged();
    }

    public void toggle(int position) {
        setChecked(position, !isChecked(position));
    }

    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        ListRow r = (ListRow) buttonView.getTag();
        r.setEnabled(isChecked);
        mCheckStates.put(items.indexOf(r), isChecked);
        Toast.makeText(getContext(), "row " + r.getName() + " changed to "+isChecked, Toast.LENGTH_SHORT).show();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            Log.i("VIEW", "init holder");
            convertView = vi.inflate(R.layout.list_row, null);
            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.name);
            holder.enabled = (CheckBox) convertView
                    .findViewById(R.id.enabled);
            convertView.setTag(holder);
        } else {
            Log.i("VIEW", "using holder");
            holder = (ViewHolder) convertView.getTag();
        }
        ListRow row = items.get(position);
        if (row != null) {
            holder.name.setText(row.getName());
            holder.enabled.setTag(row);
            holder.enabled.setChecked(mCheckStates.get(position, false));           holder.enabled.setOnCheckedChangeListener(this);
        }
        return convertView;
    }

    static class ViewHolder {
        TextView name;
        CheckBox enabled;
    }

}

In my Activity (that extends ListActivity) I do the following:

private static List<ListRow> rows;
private ListRowAdapter lra;

… and then

getListView().setItemsCanFocus(false);
getListView().setTextFilterEnabled(true);
rows = initRows();
lra = new ListRowAdapter(this, R.layout.list_row, rows);
setListAdapter(lra);

and that works fine while scrolling. But if I don’t use mCheckStates array it fails! I just can’t understand why. I have items array as a member of my Activity class and it contains all the states of checkboxes! I update it in onCheckedChanged() method like I update mCheckState. So the following code has to work:

public boolean isChecked(int position) {
    return items.get(position).isEnebled();
}

public void setChecked(int position, boolean isChecked) {
    items.get(position).setEnabled(isChecked);
    notifyDataSetChanged();
}

public void toggle(int position) {
    setChecked(position, !isChecked(position));
}

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    ListRow r = (ListRow) buttonView.getTag();
    r.setEnabled(isChecked);
    Toast.makeText(getContext(), "row " + r.getName() + " changed to "+isChecked, Toast.LENGTH_SHORT).show();
}

and in getView() method:

holder.enabled.setTag(row);holder.enabled.setChecked(row.isEnabled());

But it doesn’t. It loses checkbox states while scrolling and I don’t know why.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-19T05:02:22+00:00Added an answer on May 19, 2026 at 5:02 am

    I’m not sure I followed everything you said there, but keep in mind that ListView recycles views as you scroll. This means that you cannot assume that a view will be in any default state at the start of getView. This is probably why it doesn’t work when you stop resetting the checkbox to the correct state every time you get a new view.

    That said, did you consider using ListViews built in checkbox tool? Set its choice mode to CHOICE_MODE_MULTIPLE and use one of their provided layouts, like android.R.layout.simple_list_item_multiple_choice.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a custom list adapter contains a layout with controls in it. I
I have a custom listview row that contains a number of textView components. Instead
I have a list view that is periodically updated (every 60 seconds). It was
We have created a new List View Style that shows thumbnails from a picture
I have a view that has a list of jobs in it, with data
I have a listview with custom rows and that extends SimpleAdapter. Each row consist
I have a list view that is displaying data using the gridview. This list
I have a view that has a custom ArrayAdapter as a ListAdapter. Customer is
I have got ListView with a custom Adapter. Every row contains clickable buttons and
I have List of items. I'm using custom adapter (Android 1.5). Everything works perfectly,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.