我正在构建一个Android应用程序,该应用程序有一个开放的部分和一些需要身份验证的操作。
我所做的是当用户点击需要身份验证的操作时,显示登录对话框,用户可以登录,登录有效30分钟。
所以我在一个片段中有3个按钮,当点击时检查用户是否已登录,如果没有,则调用登录对话框。
问题是:如何识别单击了哪个按钮,因为当用户单击按钮并且未经过身份验证时,我只需创建登录对话框并将setTargetFragment设置为调用者片段,这对于3个按钮是相同的
有没有办法将参数传递给登录对话框来识别?
代码如下:
当用户点击按钮时:
final DialogFragment loginDialog = new LoginDialogFragment();
loginDialog.setTargetFragment(this, 0);
btnAprovar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!LoginService.getInstance().isLoggedOn()) {
loginDialog.show(getFragmentManager(), "Login");
}
}
});
在对话框中:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.fragment_login_dialog, null);
final EditText txtUser = (EditText) v.findViewById(R.id.txtUsername);
final EditText txtPwd = (EditText) v.findViewById(R.id.txtPassword);
builder.setView(v)
.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
DoLogin dl = new DoLogin();
dl.execute(txtUser.getText().toString(), txtPwd.getText().toString());
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
private void DoPost(Boolean _result) {
if (_result.equals(true)) {
((PublicacaoDetailFragment) this.getTargetFragment()).onAuthTrue();
} else {
((PublicacaoDetailFragment) this.getTargetFragment()).onAuthFalse();
}
}
这样做的最佳做法是什么?
由于
答案 0 :(得分:1)
要扩展@ Rodolfo的答案,你应该在这里使用装饰器/包装器模式。
在LoginDialogFragment中,您应该只拥有DialogFragment的实例变量,而不是扩展DialogFragment。这样,您可以使用名为show(String buttonDescription)的方法。在您自己的show(...)方法中,您可以调用DialogFragment的show()方法。
答案 1 :(得分:0)
由于您在自己的课程中扩展DialogFragment
,因此您有两种选择:
onClick
方法中,在致电show()
的{{1}}之前,请调用此变量的setter并传递Dialog
。在这种情况下,v.getId()
是与您添加v
的组件相关联的View
。OnClickListener
内的View
个按钮传递给Bundle
。