2010-12-18 177 views
3

我的应用程序包含一个列表视图。 listview中的每个项目都有一个删除按钮。但删除按钮无法删除列表视图中的项目。请告诉我如何删除listview中的项目以及database.my中的项目。如何从Android的列表视图中删除项目

我来源:

public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sharefolioedit); 
     Log.e("string",s.toString()); 
     add = (ImageButton) findViewById(R.id.add); 
     add.setOnClickListener(this); 
     done = (Button) findViewById(R.id.done); 
     done.setOnClickListener(this); 

     getList(); 

     } 


    public void onCreate1(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      delete= (ImageButton) findViewById(R.id.delete); 
      delete.setOnClickListener(this); 
    } 
    protected void onListItemClick(ListView l, ImageButton delete, int position,long id) { 
      super.onListItemClick(l, delete, position, id); 
      ID=id; 
       final Integer index =l.getSelectedItemPosition(); 
      Log.e("delete method","delete"); 

       Log.e("ID value",index.toString()); 
       new AlertDialog.Builder(ShareFolioEditActivity.this) 
       .setTitle("Delete") 
      .setMessage("Are you sure ??? ") 
        .setNeutralButton("no",null) 
        .setPositiveButton("yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
      confirmdelete(index);     
      } 
     })  .show(); 
      } 

      public void myClickHandler(View v) { 
      { 
//    int position = 0; 
//    onListItemClick(lv, delete, position, ID); 
//    ID=id; 
       Log.e("delete method","delete"); 

       final Integer a = new Integer(v.getId()); 
       Log.e("ID value",a.toString()); 
       new AlertDialog.Builder(ShareFolioEditActivity.this) 
       .setTitle("Delete") 
      .setMessage("Are you sure ??? ") 
        .setNeutralButton("no",null) 
        .setPositiveButton("yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
      confirmdelete(a);     
      } 
     })  .show(); 
      } 
     } 

    public void onClick(View v) { 
     if(v.equals(add)) 
     { 
      Intent in=new Intent(ShareFolioEditActivity.this,AddCategory.class); 
      startActivity(in); 
     } 
     if(v.equals(done)) 
     { 
      Intent i=new Intent(ShareFolioEditActivity.this,ShareFolioActivity.class); 
      startActivity(i); 
     } 
    } 

    public void confirmdelete(int index) 
    { 
     db.delete("sharelist", "_id="+index, null); 
     Toast.makeText(this, "row deleted"+index, Toast.LENGTH_SHORT).show(); 
     Bundle b=null; 
     onCreate(b); 
    } 

    public void getList() 
    { int x = 0; 
     String where=null; 
     csh=new createSqliteHelper(this); 
     try{ 

      //db.open(); 
     db=csh.getReadableDatabase(); 
     }catch(Exception e){ 
      System.out.println(e); 
     } 
     if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) { 
      where=getIntent().getStringExtra(SearchManager.QUERY); 
      x=1; 
     } 
     if(x==1) 
     { 
     cur=db.rawQuery("SELECT * FROM sharelist where category LIKE '%"+where+"%'",null); 
     }else{ 
     cur=db.rawQuery("SELECT * FROM sharelist ORDER BY category",null);} 
     Log.e("cursor",cur.toString()); 
    SimpleCursorAdapter list=new SimpleCursorAdapter(this,R.layout.edititems,cur,s,i); 
    getListView(); 
    setListAdapter(list); 

    } 
} 

的sharefolioedit XML布局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/text" 
    android:text="CATEGORIES" 
    android:layout_centerHorizontal="true" 
    /> 

    <Button 
     android:id="@+id/done" 
     android:text="Done" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_width="90px" 
     android:layout_height="20px" 
     android:layout_above="@id/android:list" /> 
     <ImageButton 
     android:id="@+id/add" 
     android:text="Add" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_width="80px" 
     android:layout_height="20px" 
     android:layout_above="@id/android:list" 
     android:src="@drawable/addicon"/> 

    <ListView android:layout_width="500px" 
     android:layout_height="700px" 
     android:id="@id/android:list" 
     android:layout_alignParentBottom="true" 
     /> 
</RelativeLayout> 

的edititems.xml是

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <ImageButton 
    android:id="@+id/delete" 
    android:layout_width="70px" 
    android:paddingLeft="2px" 
    android:paddingRight="2px" 
    android:paddingTop="2px" 
    android:text="Delete" 
    android:layout_height="wrap_content" 
    android:onClick="myClickHandler" 
    android:src="@drawable/removeicon" 
    /> 

    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="10sp"> 

    <TextView 
    android:id="@+id/category" 
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    android:text="" 
    android:layout_toRightOf="@+id/catagory" 
    /> 
    </RelativeLayout> 
</LinearLayout> 

在edititems.xml我定义了一个删除按钮也所以请检查并告诉我解决方案。

回答

4

在你confirmdelete方法中,在db.delete使用AsyncTaskdoInBackground方法查询数据库并获取新的Cursor。然后在onPostExecute方法调用changeCursor您的SimpleCursorAdapter您已调用list这应该是一个类级别字段而不是本地字段,因此您的所有方法都可以访问它。这将告诉ListView适配器中的数据已更改,并且需要自行刷新。不需要在底部的confirmdelete方法中调用onCreate

下面是一些代码:

private class UpdateCursor extends AsyncTask<Void, Void, Cursor> { 
    protected Cursor doInBackground(URL... urls) { 
     Cursor result = db.query(...); 
     return result; 
    } 

    protected void onPostExecute(Cursor result) { 
     list.changeCursor(result); 
    } 
} 

好运。

+0

在我的情况下,我再次创建适配器,并将其设置为ListView。 – 2013-03-24 14:57:25

相关问题