警报对话框中的EditText框上的空验证 - Android

jcr*_*son 6 java validation alert android

我正在尝试向位于警报对话框中的编辑文本字段添加一些文本验证.它会提示用户输入名称.

我想添加一些验证,以便如果他们输入的内容为空或null,除了创建Toast说错误之外它不会做任何事情.

到目前为止,我有:

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Record New Track");
    alert.setMessage("Please Name Your Track:");
    // Set an EditText view to get user input
    final EditText trackName = new EditText(this);
    alert.setView(trackName);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            String textString = trackName.getText().toString(); // Converts the value of getText to a string.
            if (textString != null && textString.trim().length() ==0)
            {   

                Context context = getApplicationContext();
                CharSequence error = "Please enter a track name" + textString;
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, error, duration);
                toast.show();


            }
            else 
            {

                SQLiteDatabase db = waypoints.getWritableDatabase();
                ContentValues trackvalues = new ContentValues();
                trackvalues.put(TRACK_NAME, textString);
                trackvalues.put(TRACK_START_TIME,tracktimeidentifier );
                insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues);

            }
Run Code Online (Sandbox Code Playgroud)

但这只是关闭警报对话框,然后显示Toast.我希望警报对话框仍然在屏幕上.

谢谢

MrS*_*ake 4

我认为您应该重新创建Dialog,因为DialogInterface作为参数给出的似乎onClick()并没有为您提供停止关闭 的选项Dialog

我还有一些建议给你:

尝试使用Activity.onCreateDialog()Activity.onPrepareDialog()当然Activity.showDialog()。它们使对话框的使用变得更加容易(至少对我来说),而且对话框的使用看起来更像菜单的使用。使用这些方法,您还可以更轻松地再次显示对话框。

我想给你一个提示。这不是您问题的答案,但在答案中这样做更具可读性。

AlertDialog.Builder()您可以简单地执行以下操作,而不是保存对对象的引用:

new AlertDialog.Builder(this)
.setTitle("Record New Track")
.setMessage("Please Name Your Track:")
//and some more method calls
.create();
//or .show();
Run Code Online (Sandbox Code Playgroud)

为您节省参考和大量打字;)。(几乎?)所有方法都AlertDialog.Builder返回一个AlertDialog.Builder对象,您可以直接调用该对象的方法。

s也是如此Toast

Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)