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