2014-10-22 49 views
0

我有一個簡單的DialogFragment與一些數據和一個按鈕我應該在DialogFragment本身(回調方法之前)還是Activity(回調方法)中關閉DialogFragment?

public class SimpleDialogFragment extends DialogFragment { 

    public static interface Callbacks { 
     void onButtonClicked(SimpleDialogFragment dialogFragment); 
    } 

    static SimpleDialogFragment newInstance() { 
     return new SimpleDialogFragment(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View contentView = inflater.inflate(R.layout.fragment_dialog_simple, null); 
     contentView.findViewById(R.id.some_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onSomeButtonClicked(); 
      } 
     }) 
     return contentView; 
    } 

    private void onSomeButtonClicked() { 
     Callbacks callbacks = (Callbacks) getActivity(); 
     // 
     // Should I dismiss here? 
     // dismiss(); 
     // 
     callbacks.onSomeButtonClicked(this); 
    } 

} 



public class SimpleActivity extends Activity implements SimpleDialogFragment.Callbacks { 

    @Override 
    public void onSomeButtonClicked(SimpleDialogFragment dialogFragment) { 
     // 
     // Or should I dismiss here? 
     // dialogFragment.dismiss(); 
     doSomething(); 
    } 
} 

回答

1

稱其爲onSomeButtonClicked()將被罰款,只是callbacks.onSomeButtonClicked(this);

private void onSomeButtonClicked() { 
    Callbacks callbacks = (Callbacks) getActivity(); 

    callbacks.onSomeButtonClicked(this); 
    dismiss(); 
} 
+0

你能解釋一下後 - * *爲什麼在'DialogFragment'和*爲什麼*調用回調方法之後? – 2014-10-22 09:00:14

+1

當您調用dismiss()時,您將彈出堆棧上的對象,並且事務將開始移除對話框。所以你想在這種情況發生之前執行你的回調。 – Goldfish 2014-10-22 09:06:02

相關問題