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
confirmdeletemethod, after thedb.deleteuse anAsyncTaskto query the database and obtain a newCursorin thedoInBackgroundmethod. Then in theonPostExecutemethod callchangeCursoron your SimpleCursorAdapter which you have calledlistwhich 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 callonCreatein yourconfirmdeletemethod at the bottom.Here is some code:
Good Luck.