user3498995
user3498995

Reputation: 11

Delete an item in list view

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

Answers (2)

Carlos Verdes
Carlos Verdes

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

Kanak Sony
Kanak Sony

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

Related Questions