在主机片段中检索DialogFragment结果的最佳做法是什么?

时间:2015-06-26 06:55:12

标签: android android-dialogfragment

使用Bundle检索对话框结果是一个好习惯,还是最好将对象定义为输出? 例如,考虑有一个包含不同字段的输入表单对话框。我应该使用哪种代码段:

Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
mListener.onDialogConfirmClick(extras)

CustomResult custom = new CustomResult();
custom.setUserName="my_username"
custom.setPassword="my_password"
mListener.onDialogConfirmClick(custom)

1 个答案:

答案 0 :(得分:1)

通常您希望使用Activity来处理DialogFragment结果。

因此,根据this article,您应该定义一个接口,将其实现到Activity中,并使用它将结果返回到Activity中。

界面,假设您的对话框用于登录目的。

public interface OnLoginListener {
     void login(String username, String password);
}

DialogFragment:

String login = mLoginEditText.getText().toString();
String password = mPasswordEditText.getText().toString();

mButton.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        mOnLoginListener.login(login, password);
    }
});

的活动:

public class LoginActivity extends AppCompatActivity implements OnLoginListener {

//other methods

    @Override
    public void login(String login, String password) {
         //Just example.
         MyRestApi.preformLoginRequest(login, password);
    }
}

编辑如果你想从Fragment调用DialogFragment并将结果返回到Fragment,你应该使用这个

dialogFragment.setTargetFragment(this); //assuming this is the pointer to the fragment.

当你想从DialogFragment返回结果时,你可以使用Bundle和onActivityResult方法:

 Intent i = new Intent();
 i.putStringArrayListExtra(HuddlePresenter.BUNDLE_FILTER_STRING, result);
 getTargetFragment().onActivityResult(code, Activity.RESULT_OK, i);
 dismiss();

<强>替代地

getParentFragment().onActivityResult(....);