2014-07-03 71 views
0

我想从特定位置删除列表行,但它不起作用。删除列表行失败

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.blocklist); 
// this.registerReceiver(receiver , new IntentFilter("com.pluggedin.DOWNLOADCOMPLETE")); 
// receivers.add(receiver); 

    mDbHelper = new BlockDbAdapter(this); 
    mDbHelper.open(); 

    listView = (ListView)findViewById(R.id.listView1); 


// facebookInvite =(ImageButton)findViewById(R.id.fbinvite); // facebook invite code 
    noContactsTextview =(TextView)findViewById(R.id.no_contacts_label); 
    aController = (Controller) this.getApplicationContext(); 


listView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int position, 
      long arg3) { 
     // TODO Auto-generated method stub 
     uName.clear(); 
     uMobile.clear(); 


     uName.add(adapterDataList.get(position).getContactName()); /*added by ritesh */ 
     uMobile.add(adapterDataList.get(position).getContactNumber()); 

     mDbHelper.createReminder(uName.get(0).toString(), uMobile.get(0).toString()); 

     TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     deviceIMEI = tManager.getDeviceId(); 
     v.showContextMenu(); 
    } 
}); 

} 
@Override 
protected void onStop() { 
    // TODO Auto-generated method stub 
    super.onStop(); 
    finish(); 
} 
@Override 
    protected void onPause() { 
     super.onPause(); 
     mDbHelper.close(); 
    } 
@Override 
public void onStart() { 
    // TODO Auto-generated method stub 
    super.onStart(); 

    cursor = this.getContentResolver().query(Uri.withAppendedPath(SyncContactsLooserProvider.CONTENT_URI, 
      SyncContactsDatabase.Project.NAME), new String[] { BaseColumns._ID, 
     SyncContactsDatabase.Project.C_NAME, 
     SyncContactsDatabase.Project.C_CONTACT, 
     SyncContactsDatabase.Project.C_SMALLIMAGE }, null, null, SyncContactsDatabase.Project.C_NAME+ " ASC"); 

    adapter = new MySimpleCursorAdapter(this, R.layout.contact_list_item, cursor, 

      new String[] { SyncContactsDatabase.Project.C_NAME, 
     SyncContactsDatabase.Project.C_CONTACT, 
     SyncContactsDatabase.Project.C_SMALLIMAGE }, 

     new int[] { 
     R.id.list_item_name, R.id.list_item_number, R.id.list_item_image }); 

    Cursor cursor = adapter.getCursor(); 
    int count = cursor.getCount(); 

    List blockedContactsList = GeneralUtil.getBlockedContactsList(); 
    List blockedContactsPositionList = new ArrayList<Intent>(); 
    if (count>0 && cursor.moveToFirst()) 
    { 


     adapterDataList.clear(); 
     do{ 
      PhoneContacts contact = new PhoneContacts(); 
      contact.setContactName(cursor.getString(1)); 
      contact.setContactNumber(cursor.getString(2)); 
      if(blockedContactsList.contains(cursor.getString(2))){ 
       blockedContactsPositionList.add(new Integer(cursor.getPosition())); 
      } 
      adapterDataList.add(contact); 
     }while(cursor.moveToNext()); 

     noContactsTextview.setVisibility(View.GONE); 
    } 
    else 
    { 

     noContactsTextview.setVisibility(View.VISIBLE); 
    } 


    listView.setAdapter(adapter); 
    for (int i = 0; i < blockedContactsPositionList.size(); i++) { 
     listView.removeViewAt( ((Integer)(blockedContactsPositionList.get(i))).intValue() ); 
     adapter.notifyDataSetChanged(); 
    } 
} 




class MySimpleCursorAdapter extends SimpleCursorAdapter { 

    private SparseBooleanArray mSelectedItemsIds; 

    public MySimpleCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     mSelectedItemsIds = new SparseBooleanArray(); 
     loader = new SyncContactsImageLoader(context, R.drawable.stub); 

    } 

    SyncContactsImageLoader loader = null; 

    @Override 
    public void setViewImage(ImageView v, String value) { 
     v.setTag(value); 
     loader.DisplayImage(value, (Activity)v.getContext(), v); 
    } 


    public void toggleSelection(int position) { 
     selectView(position, !mSelectedItemsIds.get(position)); 
    } 

    public void selectView(int position, boolean value) { 
     if (value) 
      mSelectedItemsIds.put(position, value); 

     else 
      mSelectedItemsIds.delete(position); 
     notifyDataSetChanged(); 
    } 

    public void removeSelection() { 
     mSelectedItemsIds = new SparseBooleanArray(); 
     notifyDataSetChanged(); 
    } 

    public SparseBooleanArray getSelectedIds() { 
     return mSelectedItemsIds; 
    } 
    public int getSelectedCount() { 
     return mSelectedItemsIds.size(); 
    } 
} 

我想删除行onclicklistener。我每次尝试listview.removeAt(position),但它给我例外适配器视图不支持。

+0

您必须在适配器删除该项目,并与notiftDataSetChanged方法刷新的ListView。 – Devrim

+0

你过度复杂这一点,在onItemClick使用arg0.getAdapter()并将其转换为光标,不需要额外的列表 – pskink

+0

我的错误,将其投射到CursorAdapter和调用getitem() – pskink

回答

0

试试这个:

adapterDataList.remove(adapterDataList.getItem(pos)); 
adapterDataList.notifyDataSetChanged();