Reputation: 11
This piece of code is written to allow a user to enter a name of an establishment to search for. Once the name is found it would be displayed. If the search button is clicked without anything being specified to search, all records would be displayed.
When an item is selected within the list-view, I would like to delete that item. Although the item is being deleted, once the list is re - generated through the search open, it still re - appears.
How could this be fixed?
package com.example.farejudgeapp;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
public class ListEstablishmentsActivity extends Base_Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_establishments);
}//closes onCreate method
//reading data from database
public void getEstablishmentMatches(View view){
EstablishmentHelper helper = new EstablishmentHelper(this);
final SQLiteDatabase db = helper.getReadableDatabase();
//These are the rows from the Establishment's database that would be retrieved
String columns1 [] = {"establishmentName", "establishmentType", "foodServed", "location", "contactNumber"};
final ListView listview = (ListView)findViewById(R.id.searchEstablishmentsListView);
final List<String> establishments = new ArrayList<String>();
String selection = "establishmentName LIKE ?";
//Capture data entered in text box
EditText establishmentSearchText = (EditText)findViewById(R.id.editTextSearchEstablishment);
String establishmentSearchTextString = establishmentSearchText.getText().toString();
//Searching for establishment
String selectionArgs [] = {"%" + establishmentSearchTextString + "%"};
//Querying database
Cursor c = db.query("establishments", columns1, selection, selectionArgs, null, null, null);
//Loops to add data from database to the list view
c.moveToFirst();
while(!c.isAfterLast())
{
final String establishmentName = c.getString(c.getColumnIndex("establishmentName"));
final String establishmentType = c.getString(c.getColumnIndex("establishmentType"));
final String foodServed = c.getString(c.getColumnIndex("foodServed"));
final String location = c.getString(c.getColumnIndex("location"));
final String contactNumber = c.getString(c.getColumnIndex("contactNumber"));
final String details = "Establishment Name: " + establishmentName + "\n" + "Establishment Type: " + establishmentType + "\n" + "Food Served: " + foodServed + "\n" + "Location: " + location + "\n" + "Contact Number: " + contactNumber ;
//Show various column data//
establishments.add(details);
c.moveToNext();
}//close while loop
//Create an empty adapter that would be used to display the loaded data.
final EstablishmentAdapter adapter = new EstablishmentAdapter(this, android.R.layout.simple_list_item_1, establishments);
listview.setAdapter(adapter);
//Listens for when an item is clicked.
listview.setOnItemClickListener(new OnItemClickListener() {
//Prompts user to delete an establishment when an item is clicked.
@Override
public void onItemClick(AdapterView<?> parent, final View view,
final int position, final long id) {
// Create and display the Alert dialog when next is clicked
new AlertDialog.Builder(ListEstablishmentsActivity.this)
.setTitle(" Delete Establishment ")
.setMessage(
"Are you sure you want to delete the selected establishment?")
.setNeutralButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface Dialog,
int which) {
// do nothing - it will just close when clicked
}//closes onClick method
})
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
//Deletes selected establishment
@Override
public void onClick(DialogInterface Dialog, int which) {
/*
* http://androidforbegineers.blogspot.com/2013/08/delete-row-item-in-listview-android.html
*/
//Deletes selected establishment from database
//Captures id of the list view item that was selected to be deleted
final long deleteId = id;
db.execSQL("DELETE FROM establishments WHERE id=" + deleteId);
//db.delete("establishments", "id="+deleteId, null);
establishments.remove(deleteId);
//establishments.remove(position);
android.util.Log.w(this.getClass().getName(),
" Establishment Deleted");
//Removes item from list view
establishments.remove(position);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
}//closes onClick Method
}).show();
}//Closes onItemClick method
});//Closes setOnItemClickListener
}//closes getEstablishmentMatches method
}//closes ListEstablishmentsActivity class
Upvotes: 0
Views: 923
Reputation: 3147
establishments.remove(deleteId);
removes the element number i from the list, I mean 0= the first, 1= the second and so on.
To remove in the database by id is fine, but to remove the from list try
establishments.remove(position);
Upvotes: 0
Reputation: 1560
You are deleting item from the arraylist only and not adapter, which is still holding all items..
//Removes item from list view
establishments.remove(position);
But, you need to delete it from adapter also -
adapter.remove(item);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
Upvotes: 3