AlertDialog,savedInstance状态和按钮

时间:2013-11-06 02:42:58

标签: android

我正在做一些Android编码,总是新手,我想知道我是否做得对。 基本上我的mainactivity有两个edittext,你可以输入用户名和密码。 (我将用户名和密码存储在文本文件中,这是用于学校/学习我知道它不是存储它们的方式)

在我的jave代码中,我检查密码和用户名是否在带有onClick()的文本文件中。如果不是我想显示一个警告对话框,说明用户名/密码不正确再试一次。 我只是对我应该如何使用bundle savedInstanceState这一点感到困惑。让我先看看jave代码。

public class MainActivity extends Activity {
private Triage triage = new Triage();
File passwdFile = new File (this.getApplicationContext().getFilesDir(), "passwords.txt");
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button1);
}
public void onClick(View view){
    if (checkUsername(this.triage, view)){
        startActivity(new Intent(MainActivity.this, MainActivity2.class));
    }
    else{
        onCreateDialog(savedInstanceState).show();
       }
}

public boolean checkUsername(Triage t, View v){
    EditText username = (EditText) v.findViewById(R.id.usernameText);
    EditText passwordEntered = (EditText) v.findViewById(R.id.editText2);
    HashMap<String, Nurse> nurseMap = (HashMap<String, Nurse>)triage.getNurseMap();
    if ((nurseMap.containsKey(username)) && nurseMap.get(username).getPassword().equals(passwordEntered)){
            return true;
    }
    else {
        return false;
    }
}

public Dialog onCreateDialog(Bundle savedInstanceState){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){
            dialog.dismiss();}
            });
    builder.setMessage("Try Again")
    .setTitle("Wrong username/password");
    AlertDialog dialog = builder.create();
    return dialog;
    }
}

我想我调用onCreateDialog(savedInstanceState).show()错了,所以即时通知我如何将savedInstanceState作为参数传递?它是否正确?我知道使用了savedInstanceState,因此您可以在屏幕更改时重新创建活动,并假设警报对话框是此扩展名吗?

2 个答案:

答案 0 :(得分:1)

随着片段的引入,活动的onCreateDialog已被弃用。如果我是你,我会使用AlertDialog.Builder内联,因为这只是为了上课。

如果您认真使用onCreateDialog,则不应直接调用它。您应该调用活动的showDialog(id)方法并传递ID。系统将调用onCreateDialog(long id)并传递ID。系统将显示您为您返回的对话框。确保你匹配showDialog和onCreateDialog,这样他们要么只有id,要么两者都有id&amp;束。

如果你想使用片段。您需要子类DialogFragment并覆盖onCreateDialog方法并执行与活动onCreateDialog相同的操作(创建并返回一个Dialog)。在您的活动中,您可以创建片段的新实例并从实例中调用show(getFragmentManager(), "my-tag")

答案 1 :(得分:0)

对话框构建器的非常基本的用法是

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Hello...")
        .setPositiveButton("OK", dialogClickListener)
        .setNegativeButton("Cancle", dialogClickListener).show();

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener()
    {
        public void onClick(DialogInterface dialog, int which)
        {
            switch (which)
            {
                case DialogInterface.BUTTON_POSITIVE:
                    // Yes button clicked
                    break;
                case DialogInterface.BUTTON_NEGATIVE:
                    // No button clicked
                    break;
            }
        }
    };

您应该阅读更多相关信息here