Android通过Cursorloader获取联系人列表

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(); 

  }
 }
 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值