在哪里放置登录凭据检查-android对话框

问题描述 投票:0回答:1

当用户单击设置按钮时,我试图创建一个登录凭据屏幕。如果登录凭据看起来正确,则应进入设置屏幕。这是我正在关注的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);
}
  1. 我不确定应将此代码和凭证检查代码放在哪里?在“主要活动”中或在“登录对话框片段类”中]
  2. 我看到,无论何时我单击肯定或否定按钮,它都会关闭对话框窗口并返回到主要活动,而不管登录凭据的正确与否。我想显示凭据对话框屏幕,直到他们输入正确的凭据为止。
  3. 我看到在“运行选项卡”中有相同的打印输出,并且在对话框窗口的整个生命周期中,它连续不断地发生在屏幕上enter image description here

当用户单击设置按钮时,我试图创建一个登录凭据屏幕。如果登录凭据看起来正确,则应进入设置屏幕。这是我的官方教程...

android android-fragments dialog android-dialogfragment
1个回答
0
投票

TL; DR-Android对话框片段默认情况下会在用户单击其中的任何按钮或列表选项时关闭。为避免这种情况,仅当用户输入了正确的凭据时,才需要覆盖onDismiss()方法并继续默认的关闭行为。

© www.soinside.com 2019 - 2024. All rights reserved.