2014-04-04 227 views
-1

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

 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 
+0

有你在'adapter.remove(項目)'試過嗎? – nKn

回答

2

您從數組列表中刪除的項目,而不是適配器,它仍持有的所有項目..

//Removes item from list view 
establishments.remove(position); 

但是,你需要從適配器還刪除 -

adapter.remove(item); 
adapter.notifyDataSetChanged(); 
adapter.notifyDataSetInvalidated(); 
+0

我試過,但它仍然不起作用 – user3498995

0
establishments.remove(deleteId); 

從列表中刪除元素編號i,我的意思是0 =第一個,1 =第二個等等。

要通過ID在數據庫中刪除是好的,但除去從列表嘗試

establishments.remove(position); 
+0

在什麼enhaces你的答案@ kanak-sony的?這是她的一個子集信息... – nKn

+0

因爲她說他正在移除位置,但實際上原來的代碼已被評論,我指出唯一的問題是使用位置而不是列表的id。並且...如果列表引用是相同的(這是這種情況),調用adapter.remove並不是必需的 –

+0

有沒有一種方法在選擇項目時訪問while循環中的字符串? – user3498995

相關問題