這段代碼的寫法是允許用戶輸入要搜索的企業名稱。一旦找到該名稱,就會顯示出來。如果單擊搜索按鈕而沒有指定要搜索的任何內容,則會顯示所有記錄。
當在列表視圖中選擇一個項目時,我想刪除該項目。雖然該項目正在被刪除,但一旦通過搜索打開重新生成列表,它仍然會重新出現。
這怎麼解決?刪除列表視圖中的項目
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
有你在'adapter.remove(項目)'試過嗎? – nKn