Listview selects mutliple items when clicked

Posted by xlph on Stack Overflow See other posts from Stack Overflow or by xlph
Published on 2012-03-20T17:26:17Z Indexed on 2012/03/20 17:29 UTC
Read the original article Hit count: 373

I'm trying to make a task manager, and I only have one problem. I have a listview that gets inflated. All the elements in the listview are correct. The problem is that when I select an item, the listview will select another item away. I've heard listviews repopulate the list as it scrolls down to save memory. I think this may be some sort of problem. Here is a picture of the problem. If i had more apps loaded, then it would continue to select multiple at once.

Here is the code of my adapter and activity and XML associated

public class TaskAdapter extends BaseAdapter{
private Context mContext;
private List<TaskInfo> mListAppInfo;
private PackageManager mPack;


public TaskAdapter(Context c, List<TaskInfo> list, PackageManager pack) {
    mContext = c;
    mListAppInfo = list;
    mPack = pack;
}

@Override
public int getCount() {
    return mListAppInfo.size();
}

@Override
public Object getItem(int position) {
    return mListAppInfo.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    TaskInfo entry = mListAppInfo.get(position);


    if (convertView == null)
    {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        //System.out.println("Setting LayoutInflater in TaskAdapter " +mContext +" " +R.layout.taskinfo +" " +R.id.tmbox);
        convertView = inflater.inflate(R.layout.taskinfo,null);
    }

        ImageView ivIcon = (ImageView)convertView.findViewById(R.id.tmImage);
        ivIcon.setImageDrawable(entry.getIcon());

        TextView tvName = (TextView)convertView.findViewById(R.id.tmbox);
        tvName.setText(entry.getName());

        convertView.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v) {
                final CheckBox checkBox = (CheckBox)v.findViewById(R.id.tmbox);
                if(v.isSelected())
                {
                    System.out.println("Listview not selected ");
                    //CK.get(arg2).setChecked(false);
                    checkBox.setChecked(false);
                    v.setSelected(false);
                }
                else
                {
                    System.out.println("Listview selected ");
                    //CK.get(arg2).setChecked(true);
                    checkBox.setChecked(true);
                    v.setSelected(true);
                }

            }
        });

    return convertView;




public class TaskManager extends Activity implements Runnable
    {
private ProgressDialog pd;
private TextView ram;
private String s;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.taskpage);
        setTitleColor(Color.YELLOW);

        Thread thread = new Thread(this);
        thread.start();

    }
    @Override
    public void run() 
    {
        //System.out.println("In Taskmanager Run() Thread");
        final PackageManager pm = getPackageManager();
        final ListView box = (ListView) findViewById(R.id.cBoxSpace);
        final List<TaskInfo> CK = populate(box, pm);
        runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                ram.setText(s);
                box.setAdapter(new TaskAdapter(TaskManager.this, CK, pm));

                //System.out.println("In Taskmanager runnable Run()");    
                endChecked(CK);
            }
        });
                handler.sendEmptyMessage(0);
    }

Taskinfo.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:gravity="center_horizontal">

<ImageView 
    android:id="@+id/tmImage"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:scaleType="centerCrop"
    android:adjustViewBounds="false"
    android:focusable="false" />
<CheckBox 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:id="@+id/tmbox"
    android:lines="2"/>
      </LinearLayout>

Taskpage.xml

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
    <ListView
        android:id="@+id/cBoxSpace"
        android:layout_width="wrap_content"
        android:layout_height="400dp"
        android:orientation="vertical"/>
<TextView
        android:id="@+id/RAM"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp" />
<Button
        android:id="@+id/endButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="End Selected Tasks" />
</LinearLayout>

Any ideas for what reason mutliple items are selected with a single click would be GREATLY appreciated. I've been messing around with different implementations and listeners and listadapters but to no avail.

© Stack Overflow or respective owner

Related posts about java

Related posts about android