how to delete an item from listview in android
My app contains a listview. Each item in listview has a delete button. But delete button could not delete an item in listview. Please tell me how can i delete an item in a listview and also in database.my.
My source:
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);
}
}
The sharefolioedit xml layout is
<?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>
The edititems.xml is
<?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>
In edititems.xml i defined a delete button also so please check and tell me solution.
In your confirmdelete
method, after the db.delete
use an AsyncTask
to query the database and obtain a new Cursor
in the doInBackground
method. Then in the onPostExecute
method call changeCursor
on your SimpleCursorAdapter which you have called list
which should be a class level field instead of a local field so all your methods can access it. This will tell the ListView that the data in the adapter has changed and it needs to refresh itself. There is no need to call onCreate
in your confirmdelete
method at the bottom.
Here is some code:
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);
}
}
Good Luck.
精彩评论