2013-04-04 49 views
0

我正在構建一個應用程序,我正在使用ListView。目前,當用戶單擊ListView的一行時,會執行以下代碼。該代碼基本上刪除了與選定行相關的一些數據。該代碼是MainActivity.class的一個片段。根據來自Dialog的輸入修改MainActivity變量

//understanding this code is not crucial. list is the ListView, adapter is an 
//ArrayAdapter object and displayDataMap is a Hashmap object. 

list.setOnItemLongClickListener(new OnItemLongClickListener(){ 

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id) { 
    String key = adapter.getItem(position); //position of ListView row 
    String data = displayDataMap.get(key); 
    displayDataMap.remove(key); 

    //"aqlpzaml" is used as a regex. 
    String addressee = data.split("aqlpzaml")[1]; 
    long time = Long.valueOf(data.split("aqlpzaml")[0]); 
    int finalID = Integer.valueOf(data.split("aqlpzaml")[3]); 
    String dateTime = sdf.format(time); 
    adapter.remove(addressee + " " + dateTime); 
    adapter.notifyDataSetChanged(); 
} 

現在我想,刪除此數據之前,系統會提示用戶有Dialog,在那裏,他被問他是否是一定要進行更改。

我知道如何創建Dialog並顯示它。但我不知道如何根據Dialog輸入觸發adapterdisplayDataMap值的更改。我想如果我將使用另一個班級創建Dialog對象(使用DialogFragment),那麼我將無法訪問該對話框的setPositiveButton()中的MainActivity類的專用變量。

有什麼建議嗎?

謝謝。

回答

1

只需在onItemLongClick中插入對話框創建,並使適配器「適配器」,「收件人」和「dateTime」最終,以便您可以在setPositiveButton()方法中訪問它。

因爲我不知道你的適配器是如何創建它應該是這樣的,並在相同的功能list.setOnItemLongClickListener或類變量:

final ArrayAdapter<String> adapter = ... 

也是你的數據圖:

final Hashmap<String, ...> displayDataMap = ... 

而且你的函數應該是這樣的:

list.setOnItemLongClickListener(new OnItemLongClickListener(){ 
    @Override 
    public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id) 
    { 
     final String key = adapter.getItem(position); //position of ListView row 
     String data = displayDataMap.get(key); 
     //"aqlpzaml" is used as a regex. 
     final String addressee = data.split("aqlpzaml")[1]; 
     long time = Long.valueOf(data.split("aqlpzaml")[0]); 
     int finalID = Integer.valueOf(data.split("aqlpzaml")[3]); 
     final String dateTime = sdf.format(time); 

     Builder dialog = new Builder(view.getContext()); 
     dialog 
      .setMessage("Want to delete?") 
      .setPositiveButton("delete",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        displayDataMap.remove(key); 
        adapter.remove(addressee + " " + dateTime); 
        adapter.notifyDataSetChanged(); 
       } 
      }) 
      .setNegativeButton("cancel",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        dialog.cancel(); 
       } 
      }); 
     dialog.create().show(); 
    } 
} 
+0

是啊,請你能不能寫的代碼。 – Rajat 2013-04-04 20:17:12

+0

如果您需要有關適配器的幫助,我需要更多的代碼。 – luxer 2013-04-04 20:30:10

+0

工作。謝謝。 但我想知道是否有一種方法可以使用DialogFragment,因爲我的印象是Android javadocs說我們不應該直接使用Dialogs? – Rajat 2013-04-04 20:42:54