2012-11-11 60 views
0

我有一個ListView,並使用JSONArray的Adapter將其填充到自定義視圖中。在每一行中,我都有一個按鈕來刪除該行,但我不知道如何去做。從自定義ListView中刪除行JSONArray.remove(int)undefined

cancel.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      AlertDialog.Builder ad = new AlertDialog.Builder(context); 
      ad.setCancelable(false); 
      ad.setMessage("Are you sure?"); 
      ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        //jsonArray.remove(position); 
       } 
      }); 

jsonArray.remove(position)undefined for the typeCannot refer to a non-final variable position inside an inner class defined in a different method

的開始我的適配器是這樣的:

class JSONAdapter extends BaseAdapter implements ListAdapter { 

    private final JSONArray jsonArray; 
    private final LayoutInflater mInflater; 
    private final Context context; 
    private Button pay, cancel; 

    public JSONAdapter(Context context, JSONArray jsonArray) { 
     this.jsonArray = jsonArray; 
     this.context = context; 
     mInflater = LayoutInflater.from(context); 
    } 

所以我怎麼能刪除它的任何想法?在此先感謝

回答

1

JSONArray類沒有remove方法,所以試圖調用它在jsonArray顯然不會工作。沒有看到你的適配器的完整代碼,我會說你有兩個選擇:從jsonArray對象

  1. 提取所有數據到ArrayList(你可以使用一個簡單的數據支持類,如果你有多個值)和在JSONAdapter中使用ArrayList。然後,您可以通過刪除ArrayList中的項目來單擊Button,從列表中輕鬆刪除元素。

  2. 您也可以像現在一樣使用jsonArray,然後保留對已刪除的行數以及應刪除的確切行的引用。然後在您的適配器中,您將不得不重寫getCountgetItem方法以消除「已刪除」行。所以,在這種情況下,你不會真的刪除行,你只會讓它們顯示爲刪除。

我會選擇一個。

+0

非常感謝您的回覆。我知道JSONArray沒有刪除方法,我只是把它放在那裏,因爲我看到有些人在其他問題中「解決」這樣的問題。感謝您的回覆,我有一個想法來解決。我基本上做的是在我的適配器上創建一個remove方法,它將JSONArray解析爲一個List,然後移除,然後返回(我知道它不是選項1,但選項1需要在我的代碼中進行更多更改)。再次感謝隊友。 –

相關問題