2010-10-27 94 views
1

我正在使用和ArrayAdapter來填充ListView。選擇和項目後,它會顯示一個確認Y/N對話框。如果用戶的選擇是否定的,那麼他應該能夠選擇顯示相同對話的另一項目。等等。Android:onItemClick只返回第一個選擇的項目

這裏是我的代碼:

lView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(final AdapterView<?> parent, final View v, final int index, final long id) { 


     Toast.makeText("Selected file"+ mFiles.get(index).getfileName(), 
     Toast.LENGTH_SHORT).show(); 


     SelectedFile = mFiles.get(index); 



      showDialog(DIALOG_CONFIRMIMPORT_ID); 
     } 
    }); 

奇怪的是,雖然「吐司」顯示單擊項目每一次,只有第一個選擇項,因爲啓動該活動被傳遞給「SelectedFile」。無論您點擊不同的項目多少次,「SelectedFile」總是採用相同的值,即此代碼之外的第一個點擊項目的值。

繼承人是我的對話框代碼:

Protected Dialog onCreateDialog(int id) { 
switch(id) { 
case DIALOG_CONFIRMIMPORT_ID: 
    { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    String message = String.format(getString(R.string.importstudentfileconfirm),SelectedFile.getfileName()); 

    builder.setMessage(message) 
    .setCancelable(false) 
    .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    //  Activity.this.finish(); 
    //  startActivity(new Intent(Activity.this, LOL.class)); 
    } 
    }) 
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
SelectedFile = null; 
dismissDialog(DIALOG_CONFIRMIMPORT_ID); 
mFiles.notifyAll(); 
} 
}); 

AlertDialog alert = builder.create(); 
return alert; 
} 
} 
    return null; 
} 

非常感謝您的幫助!

回答

1

我猜這與onCreateDialog方法僅在第一次創建對話框時有關。所以當你第一次看到對話框時,它會有正確的文件名。

調用onCreateDialog後,調用onPrepareDialog(...)。 onPrepareDialog,允許您在創建對話框之後,但在顯示對話框之前更改該對話框。

請記住,在所有情況下,每次您想要顯示DIALOG_CONFIRMIMPORT_ID對話框時,Android都不會爲您創建新的對話框。每次實例化新對話的計算量過大。相反,它會創建一次,這會導致onCreatDialog被調用,然後是onPrepareDialog。每隔一次顯示對話框,它只會調用onPrepareDialog。

看看Android開發者網站上的以下文章。它很清楚地解釋事情。

http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

因此嘗試使用onCreateDialog只是東西初始化不會對話框的看房之間切換,然後用onPrepareDialog方法動態更新對話框的內容(即獲得新的文件名)

乾杯!

+0

你完全正確!非常感謝您的快速回答。乾杯! – 2010-10-27 22:57:01

+0

如果這回答了您的問題,您是否可以通過單擊答案左側的複選框大綱來接受答案。謝謝! – plainjimbo 2010-10-27 22:59:02

+0

完成。由於某種原因,複選框未顯示在我的Firefox上。 – 2010-10-27 23:25:20

相關問題