1.下面的代码是扩展listview,加上checkbox,可以让用户选择
下面的代码有参考其他网友的代码,经过实际使用下面的代码还有bug,多次选择item会错乱
public class CheckBoxCursorAdapter extends SimpleCursorAdapter {
private ArrayList<String> selection = new ArrayList<String>();
private int mCheckBoxId = 0;
private String mIdColumn;
Context mContext;
public CheckBoxCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int checkBoxId, String idColumn) {
super(context, layout, c, from, to);
mCheckBoxId = checkBoxId;
mIdColumn = idColumn;
mContext = context;
}
@Override
public int getCount() {
return super.getCount();
}
@Override
public Object getItem(int position) {
return super.getItem(position);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
CheckBox checkbox = (CheckBox)view.findViewById(mCheckBoxId);
checkbox.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Cursor cursor = getCursor();
cursor.moveToPosition(position);
String Columnvalue = cursor.getString(cursor.getColumnIndexOrThrow(mIdColumn));
int index = selection.indexOf(Columnvalue);
if (index != -1) {
selection.remove(index);
} else {
selection.add(Columnvalue);
}
}
});
Cursor cursor = getCursor();
cursor.moveToPosition(position);
String Columnvalue = cursor.getString(cursor.getColumnIndexOrThrow(mIdColumn));
if (selection.indexOf(Columnvalue)!= -1) {
checkbox.setChecked(true);
} else {
checkbox.setChecked(false);
}
return view;
}
ArrayList<String> getSelectedItems(){
return selection;
}
}
联系人界面代码,使用cursorloader加载
public class ContactsActivity extends Activity
implements LoaderCallbacks<Cursor>{
private Button btn_ok;
private Button btn_back;
// This is the Adapter being used to display the list's data
CheckBoxCursorAdapter mAdapter;
//The uri of Phone
Uri phonesUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
//This is the Projection
static final String[] PROJECTION = new String[] {
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
static final String mIdColumn= ContactsContract.CommonDataKinds.Phone.NUMBER;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_select);
String[] fromColumns = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER };
int[] toViews = {android.R.id.text1,android.R.id.text2};
mAdapter = new CheckBoxCursorAdapter(this,
R.layout.contacts_listview, null,
fromColumns, toViews, R.id.checkBox,mIdColumn);
ListView lsView = (ListView)findViewById(R.id.ListView);
btn_ok = (Button)findViewById(R.id.ok);
btn_back =(Button)findViewById(R.id.back);
btn_ok.setOnClickListener(new Botton_ok_listener());
//btn_back.setOnClickListener(new Botton_back_listener());
lsView.setAdapter(mAdapter);
lsView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
ListView listView = (ListView)parent;
Cursor cursor = (Cursor)listView.getItemAtPosition(position);
}
});
getLoaderManager().initLoader(0, null, this);
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// This is called when a new Loader needs to be created.
return new CursorLoader(this,
phonesUri,
PROJECTION,
null,
null,
null
);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
private class Botton_ok_listener implements OnClickListener{
public void onClick(View v){
Log.d("debugging...","Botton_ok_listener");
Intent data=new Intent();
data.putStringArrayListExtra("number", mAdapter.getSelectedItems());
finish();
}
}
}