如何从android中的listview中删除一个项目

时间:2010-12-18 04:53:22

标签: android xml listview button

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

我的来源:

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中我也定义了一个删除按钮,所以请检查并告诉我解决方案。

1 个答案:

答案 0 :(得分:4)

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

以下是一些代码:

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

祝你好运。