CursorAdapter in Listview

时光总嘲笑我的痴心妄想 提交于 2019-12-05 01:34:31

problem is when you update your database just database going to update not cursor that adapt your cursor adapter ,so you have to use

 changeCursor(newcursor);

in your adapter after updating your database. hope this help you.

The checked items are not recycled. You have to save the checked items to some sort of array - dynamic or static. A boolean array would be well suited for this purpose.

Boolean[] myCheckedItems = new Boolean[SIZE];

I would use the listAdapter to implement the use of multiple selections in a ListView. Create the following Model which hold the name and the information if this element is currently selected.

First create the model class:

public class Model {

    private String name;
    private boolean selected;

    public Model(String name) {
        this.name = name;
        selected = false;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isSelected() {
        return selected;
    }

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

} 

Create the following xml file in the layouts folder:

<?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="wrap_content" >

<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="30px" >
</TextView>

<CheckBox
    android:id="@+id/check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px" >
</CheckBox>
</RelativeLayout> 

Create the following Adapter. This adapter adds a listener on the Checkbox view . If the checkbox is selected the underlying data of the model is changed. Checkbox gets the corresponding model element assigned via the getTag() method.

import java.util.List;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

public class InteractiveArrayAdapter extends ArrayAdapter<Model> {

    private final List<Model> list;
    private final Activity context;

    public InteractiveArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.rowbuttonlayout, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView text;
        protected CheckBox checkbox;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.rowbuttonlayout, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          Model element = (Model) viewHolder.checkbox.getTag();
          element.setSelected(buttonView.isChecked());

          }
        });
        view.setTag(viewHolder);
        viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());
    return view;
    }
}

At the end, you need to change your activity to the following:

import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MyList extends ListActivity {

/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    // create an array of Strings, that will be put to our ListActivity
    ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this, getModel());
    setListAdapter(adapter);
}

private List<Model> getModel() {
    List<Model> list = new ArrayList<Model>();
    //The following elements need to be changed by your elements.
    list.add(get("List number 1"));
    list.add(get("List number 2"));
    list.add(get("List number 3"));
    list.add(get("List number 4"));
    list.add(get("List number 5"));
    list.add(get("List number 6"));

    // Initially select one of the items
    list.get(1).setSelected(true);
    return list;
}

private Model get(String s) {
      return new Model(s);
}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!