当用户单击设置按钮时,我试图创建一个登录凭据屏幕。如果登录凭据看起来正确,则应进入设置屏幕。这是我正在关注的official tutorial。
我被设法创建一个对话框,单击该按钮后,它将显示一个窗口。我也将对话框传递回Dialog主机,这是代码片段。
// Dialog Fragment
public class SignInDialogFragment extends AppCompatDialogFragment {
// Use this instance of the interface to deliver action events
private SignInDialogListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_signin, null))
.setPositiveButton("Sign in ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
listener.onDialogPositiveClick(SignInDialogFragment.this);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
SignInDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
public interface SignInDialogListener {
void onDialogPositiveClick(SignInDialogFragment dialog);
}
// Override the Fragment.onAttach() method to instantiate the LoginDialogListener
@Override
public void onAttach(Context context) {
super.onAttach(context);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the host
listener = (SignInDialogListener) context;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(context.toString()
+ " must implement NoticeDialogListener");
}
}
}
// Main activity
public class IdleActivity extends BaseActivity implements SignInDialogFragment.SignInDialogListener {
protected void onCreate(Bundle savedInstanceState) {
...
...
FloatingActionButton settingsButton = findViewById(R.id.floatingButtonTools);
buttonTools.setOnClickListener(v-> {
showSignInDialog();
});
...
...
}
private void showSignInDialog() {
// Create an instance of the dialog fragment and show it
SignInDialogFragment signInDialog = new SignInDialogFragment();
signInDialog.show(getSupportFragmentManager(), "signin");
}
@Override
public void onDialogPositiveClick(SignInDialogFragment dialog) {
}
}
目前,我正在考虑对这样的凭证进行硬编码检查,稍后我将其移至服务电话。
if(user.isequals("abcd") && password .isequals("1234")) {
Intent intent = new Intent(getApplicationContext(),
SettingsActivity.class);
startActivity(intent);
}
当用户单击设置按钮时,我试图创建一个登录凭据屏幕。如果登录凭据看起来正确,则应进入设置屏幕。这是我的官方教程...
TL; DR-Android对话框片段默认情况下会在用户单击其中的任何按钮或列表选项时关闭。为避免这种情况,仅当用户输入了正确的凭据时,才需要覆盖onDismiss()方法并继续默认的关闭行为。