2014-02-07 83 views
0

我有一個非常基本的疑問。我有一個MainActivity,通過點擊一個按鈕,我創建了一個定製對話框,其中有四到五個選項。在單擊一個值時,我想存儲它(比如字符串值),以便在關閉對話框時可以從MainActivity訪問所選的選項。從DialogFragment將屬性設置爲MainActivity

對於這個我使用下面的方法 - 我在MainActivity宣佈一些靜態的字符串值,我將設置對話框,根據對話框中的用戶選擇的文本值選項。例如,在MainActivity,我聲明:

public static String strval = ""; 

並在對話框中,我將它使用

MainActivity.strval = options[which]; 

其中options是包含所有選項字符串值的字符串數組

有沒有更好的方法來做到這一點?我意識到以這種方式使用靜態變量並不是一個很好的做法,當使用多個活動進行應用程序時,但由於我在此應用程序中只有一個MainActivity,此方法是否正常?

回答

1

設置特定活動的靜態變量並不可取,因爲這會在片段中添加依賴項。碎片應該是孤立的,應該是有凝聚力的。以便它可以被任何活動使用。

更好的辦法是有一個接口DialogAction:

interface DialogAction{ 
void onDialogAction(String option); 
} 

讓您的活動實現這一點,寫的onDialogAction

void onDialogAction(String option){ 
//set an instance variable 
} 

的實施和DialogFragment聲明DialogAction的對象:

private DialogAction listener; 
public void setListener(DialogAction listener){ 
    this.listener=listener; 
} 
現在

行動只是CAL l

listener.onDialogAction(options[which]); 

不要忘記在你的片段中設置Listener活動。

當你創建新的片段活動中也稱:

fragment.setListener(this);//'this' here the is a reference to the Activity implementing DialogAction 
+0

確切位置在哪裏我添加公共無效setListener(DialogAction聽衆){ \t \t this.listener =監聽; ? – SoulRayder

+0

把它放在片段中。在創建新片段時調用它 –

+0

我在按鈕單擊時從MainActivity創建dialogfragment。所以我從那裏叫它?究竟如何? – SoulRayder