Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中显示消息而不关闭实际对话框_Java_Android - Fatal编程技术网

Java 在Android中显示消息而不关闭实际对话框

Java 在Android中显示消息而不关闭实际对话框,java,android,Java,Android,我必须对Android应用程序进行两次修复,虽然我对Android不太了解,但我在一些我认为不太难的事情上遇到了问题,我只想当按下OK按钮,但某些条件尚未满足时,它会显示一条消息并保持在同一屏幕上,直到数据正确或用户取消,但我已经尝试了一段时间,无论我尝试什么,它都会显示消息,然后会出现一个白色屏幕,甚至尝试在互联网上搜索示例 这是我的代码: final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

我必须对Android应用程序进行两次修复,虽然我对Android不太了解,但我在一些我认为不太难的事情上遇到了问题,我只想当按下OK按钮,但某些条件尚未满足时,它会显示一条消息并保持在同一屏幕上,直到数据正确或用户取消,但我已经尝试了一段时间,无论我尝试什么,它都会显示消息,然后会出现一个白色屏幕,甚至尝试在互联网上搜索示例

这是我的代码:

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

        LinearLayout layout = new LinearLayout(this);
        LinearLayout.LayoutParams parms = new   LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setLayoutParams(parms);

        layout.setGravity(Gravity.CLIP_VERTICAL);
        layout.setPadding(2, 2, 2, 2);

        TextView tv = new TextView(this);
        tv.setText("Es necesario rellenar los datos solicitados a continuación para poder realizar su primer canje");
        tv.setPadding(40, 40, 40, 40);
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(20);

        EditText et = new EditText(this);
        String etStr = et.getText().toString();
        TextView tv1 = new TextView(this);
        tv1.setText("Nombre completo");

        EditText et2 = new EditText(this);
        String etStr2 = et2.getText().toString();
        TextView tv2 = new TextView(this);
        tv2.setText("Teléfono");

        final EditText et3 = new EditText(this);
        String etStr3 = et3.getText().toString();
        TextView tv3 = new TextView(this);
        tv3.setText("Correo electrónico");

  LinearLayout.LayoutParams tv1Params = new    LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,    LinearLayout.LayoutParams.WRAP_CONTENT);
        tv1Params.bottomMargin = 5;
        layout.addView(tv1,tv1Params);
        layout.addView(et, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,  LinearLayout.LayoutParams.WRAP_CONTENT));
        layout.addView(tv2,tv1Params);
        layout.addView(et2, new   LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        layout.addView(tv3,tv1Params);
        layout.addView(et3, new  LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));


        alertDialogBuilder.setView(layout);
        alertDialogBuilder.setTitle("hola");
        // alertDialogBuilder.setMessage("Input Student ID");
        alertDialogBuilder.setCustomTitle(tv);


        // alertDialogBuilder.setMessage(message);
        alertDialogBuilder.setCancelable(true);

        // Setting Negative "Cancel" Button
        alertDialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {

 alertDialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {

[more code here]

 alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {



                matcher = pattern.matcher(et3.getText().toString());

                if (matcher.matches())
                {
                    [more code here]
                    }
                    else
                     {
   Toast.makeText( contexto, "Por favor, introduzca un e-mail válido", Toast.LENGTH_LONG).show();
                    }

希望你能帮我做这件事,因为我会发现从一开始就必须学习android,才能在5分钟或更短的时间内用另一种编程语言完成一些事情,而我根本不知道这些语言。

首先,使用xml创建布局,并像这样放大视图:

LayoutInflater li = (LayoutInflater) <ACTIVITY_NAME>.this
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = li.inflate(R.layout.<LAYOUT_NAME>, parent, false);
这样做只会使您的代码更干净

方法:
setPositiveButton
setNeutralButton
setNegativeButton
进行编码,这样当按下它们时,对话框将在侦听器中完成代码执行后关闭

如果你的Android应用程序在主线程上运行超过5秒,那么该应用程序将抛出一个错误,表示该应用程序不再响应。如果希望执行长操作,则应使用
异步任务
服务

我相信你想有一个某种进步吧。我会把你链接到一个 本教程将向您展示如何实现这一点


希望这能为你指明正确的方向

像这样创建两个实例变量或类变量

private Toast toast;
private boolean stop = false;
编写一个名为this的方法

private void showInfiniteToast() {
    stop = false;
    Thread t = new Thread() {
        public void run() {
            try {
                while (true) {
                    if (!stop) {
                        toast.show();
                    } else {
                        toast.cancel();
                        return;
                    }
                    sleep(1850);
                }
            } catch (Exception e) {
                Log.e("Infinite Toast", "Error "+ e.getLocalizedMessage());
            }
        }
    };
    t.start();
}
现在在oncreate中创建toast并调用此方法

toast = Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG);
showInfiniteToast();
现在,如果您想更改toast消息,请使用以下命令

toast.setText("message");
要停止敬酒,请拨打任何一个电话

//Call anyone of them
stop = true;
toast.cancel();
要实现自己的自定义视图,请使用以下命令

View mView; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
mView = inflater.inflate(R.layout.mylayout, null);
toast.setView(mView);
这是完整的文件

public class MainActivity extends Activity implements OnClickListener {

Button btnChange, btnStop, btnShow;
private Toast toast;
private boolean stop = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnShow = (Button) findViewById(R.id.btnShow);
    btnShow.setOnClickListener(this);
    btnChange = (Button) findViewById(R.id.btnChange);
    btnChange.setOnClickListener(this);
    btnStop = (Button) findViewById(R.id.btnStop);
    btnStop.setOnClickListener(this);

    toast = Toast.makeText(getApplicationContext(), "Test",
            Toast.LENGTH_LONG);
    showInfiniteToast();

}


private void showInfiniteToast() {
    stop = false;
    Thread t = new Thread() {
        public void run() {
            try {
                while (true) {
                    if (!stop) {
                        toast.show();
                    } else {
                        toast.cancel();
                        return;
                    }
                    sleep(1850);
                }
            } catch (Exception e) {
                Log.e("Infinite Toast", "Error "+ e.getLocalizedMessage());
            }
        }
    };
    t.start();
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btnShow:
        showInfiniteToast();
        break;
    case R.id.btnChange:
        toast.setText("Added");

        break;
    case R.id.btnStop:
        stop = true;
        toast.cancel();
        break;

    default:
        break;
    }
}

}

创建一个dialogBuilder,并覆盖负按钮和正按钮,然后在“侦听器”上单击“执行任何您想要的操作”。这将阻止对话框关闭

像这样: 创建生成器,初始化它,将其设置为例如:

builder.setView(view);
builder.setCancelable(false);
覆盖ondismiss侦听器和onshow侦听器,如:

builder.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        if(!errorFlag) {
            dialog.dismiss();
        }
    }   
});



builder.setOnShowListener(new OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {
        Button b = builder.getButton(AlertDialog.BUTTON_POSITIVE);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // write the logic here, and maintain a flag.
                // if the flag is true then only dismiss the dialog else show another one
            }
也覆盖负按钮


使用
builder.show()

显示生成器如果你不想学习android,也许你应该在接到与android编程相关的任务之前告诉你的老板……无法解决方法:
builder.setOnShowListener()
builder.setView(view);
builder.setCancelable(false);
builder.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        if(!errorFlag) {
            dialog.dismiss();
        }
    }   
});



builder.setOnShowListener(new OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {
        Button b = builder.getButton(AlertDialog.BUTTON_POSITIVE);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // write the logic here, and maintain a flag.
                // if the flag is true then only dismiss the dialog else show another one
            }