2013-08-26 69 views
2

我有一個活動可能會顯示一些DialogFragments。該活動需要從對話中獲得響應。 我使用了一個偵聽器。在活動:活動被破壞並重新創建後處理重新創建的對話框片段的最佳方式

ProgressMarkDialog dialog = new ProgressMarkDialog(); 
dialog.setOnProgressMarkSelected(new ProgressMarkDialog.OnProgressMarkSelected() { 
    @Override 
    public void onSelect(final int a) { 
    //some code.. 
     } 
}); 

在對話框:不知何故,直到活動被破壞

public void setOnProgressMarkSelected(OnProgressMarkSelected onProgressMarkSelected) { 
    this.onProgressMarkSelected = onProgressMarkSelected; 
} 

此代碼工作正常,但對話框仍處於打開狀態。該程序將因NullPointerException而崩潰,因爲onProgressMarkSelected爲null。

我可以使用

@Override 
public void onAttach(final Activity activity) { 
    super.onAttach(activity); 
    onProgressMarkSelected = (OnProgressMarkSelected) activity; 
} 

和執行活動的接口。 但是,如果我有幾個DialogFragments,這意味着我應該在活動中實現少量接口,並且代碼將非常混亂。 這種情況下Android的最佳做法是什麼?

+0

什麼打擾你?活動中的'implements ...'或回調數量? –

+0

是的。工具的數量... – xxx

回答

0

在我看來,最好的辦法是堅持標準的正/負鍵和這樣所示http://developer.android.com/reference/android/app/DialogFragment.html

看看它連接DialogInterface.OnClickListener:標準的Android用戶期望看到正和/或負按鈕在對話框中。活動 - 如果需要 - 只應該被告知對話的結果(正面的,負面的輸入數據)。任何其他輸入驗證都應在DialogFragment

0

內處理。您可以在接口中使用繼承。因爲接口多重繼承可能是這樣的:

public interface A(){ 
    void doA(); 
} 

public interface B(){ 
    void doB(); 
} 

public interface BundleAB extends A, B { 
    void justAnotherMethod(); 
} 

有了這個,你可以捆綁你的接口,並使用它像這樣:

public class MyClass implements BundleAB { 
    @Override 
    public void doA(){} 

    @Override 
    public void doB(){} 

    @Override 
    public void justAnotherMethod(){} 
} 
相關問題