2013-06-05 69 views
1

我正在使用試圖添加/刪除項目的ListView。添加位相當簡單,但刪除雖然證明是棘手的。 我正在考慮使用多項選擇列表,但是從簡單的事情開始,我選擇了一種選擇模式來測試它。 我有一個包含項目的字符串數組,一個數組適配器在數據發生變化時進行通知。ListView選擇的位置總是重置

expenseAdapter=new ArrayAdapter<String>(this, 
              android.R.layout.simple_list_item_single_choice, 
              android.R.id.text1, 
              expenseList); 
    myListView.setAdapter(expenseAdapter); 
    myListView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View item, int position, 
       long index) { 



      ((ListView)parent).setItemChecked(position, true); 

      item.setSelected(true); 
     } 

    }); 

我還爲該項目添加了一個監聽器onClick事件。在視覺上該項目被選中/取消選中問題是當我點擊觸發項目刪除的按鈕時,列表中選定的索引始終爲-1,儘管該項似乎被選中。

與onClick事件

public boolean doDelete(View view) 
{ 
    ListView myListView= (ListView)findViewById(R.id.list); 
    String s=(String)myListView.getSelectedItem(); 

    expenseList.remove(s); 
    expenseAdapter.notifyDataSetChanged(); 

    return true; 
} 

任何想法發生了什麼還是什麼,我做錯了

刪除按鈕?

+0

你如何執行刪除操作,你可以在這裏發佈完整的代碼以便更好地理解。 –

+0

添加了刪除代碼。 – Sleeperson

+0

您每次都得到-1,因爲您從列表中刪除一個對象並且不可用。 –

回答

0

我已經看到你的代碼,並明白這個問題,當你從List中刪除項目時,你會得到-1索引,因爲那個項目不存在於那個列表中,所以請更改你的代碼。

我改變getSelectedItem()getSelectedItemId()在這裏它將返回所選項目ID而不是項目,因此您可以從列表基於項目的ID,這將是項目的索引列表中刪除該項目。

public boolean doDelete(View view) 
{ 
    ListView myListView= (ListView)findViewById(R.id.list); 
    long id = myListView.getSelectedItemId(); 

    expenseList.remove(id); 
    expenseAdapter.notifyDataSetChanged(); 

    return true; 
} 

希望它能幫助你。