2014-10-22 48 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

相关问题