使用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)
答案 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(....);