AlertDialog 按钮不起作用,也不会关闭
AlertDialog button doesn't work and it doesn't dismiss
我有这个 AlertDialog 应该是两个玩家之间的决斗。它显示了一张决斗的图像,三秒钟后,多亏了一个计时器,它显示了一个 "BANG" 图像。当 "BANG" 图像出现时,玩家必须按下 "BANG" 按钮,溃烂的玩家获胜。我的问题是按钮上的侦听器不起作用,我无法关闭 alertDialog。这是代码
package com.example.root.gbu;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.SystemClock;
import android.widget.ImageView;
public class DuelFrame {
private Context context;
private long startTime;
private long endTime;
private boolean timeToShot=false;
private ImageView image;
private AlertDialog alertDialog;
public DuelFrame(String enemy, Context context){
this.context = context;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Duel against " + enemy);
image = new ImageView(context);
image.setImageResource(R.drawable.duel_start);
builder.setView(image);
builder.setNegativeButton("BANG",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
System.out.println("********************BANG PREMUTO*************************");
if(timeToShot) {
endTime = SystemClock.elapsedRealtimeNanos();
ConnectionStream.getOut().println("TIME:" + String.valueOf(endTime - startTime));
}
else
ConnectionStream.getOut().println("TIME:LOSE");
}
});
alertDialog = builder.create();
}
public void start(){
((Activity)context).runOnUiThread(new Runnable(){//mostro la finestra
@Override
public void run(){
alertDialog.show();
}
});
new java.util.Timer().schedule(//timer per cambiare l'immagine
new java.util.TimerTask() {
@Override
public void run() {
((Activity)context).runOnUiThread(new Runnable(){
@Override
public void run(){
image.getLayoutParams().height = image.getHeight();
image.getLayoutParams().width = image.getWidth();
image.setImageResource(R.drawable.bang);
startTime = SystemClock.elapsedRealtimeNanos();
timeToShot = true;
}
});
}
}, 3000);
}
public void cancel(){
((Activity)context).runOnUiThread(new Runnable(){
@Override
public void run(){
alertDialog.dismiss();
}
});
}
}
所以我需要修复 onClickListener 和 cancel() 函数
使用这个警告框。它对我有用
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SettingActivity.this);
alertDialogBuilder.setMessage("Message");
alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//Code
dialog.cancel();
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
您需要致电
showDialog(int)
方法。
然后覆盖该方法
onCreateDialog(int)
在此创建对话框并设置正负按钮,然后它将起作用。
尽管这种方式已被弃用。你现在应该使用片段。不过你还是可以试试看!
检查此 link:https://developer.android.com/guide/topics/ui/dialogs.html
我有这个 AlertDialog 应该是两个玩家之间的决斗。它显示了一张决斗的图像,三秒钟后,多亏了一个计时器,它显示了一个 "BANG" 图像。当 "BANG" 图像出现时,玩家必须按下 "BANG" 按钮,溃烂的玩家获胜。我的问题是按钮上的侦听器不起作用,我无法关闭 alertDialog。这是代码
package com.example.root.gbu;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.SystemClock;
import android.widget.ImageView;
public class DuelFrame {
private Context context;
private long startTime;
private long endTime;
private boolean timeToShot=false;
private ImageView image;
private AlertDialog alertDialog;
public DuelFrame(String enemy, Context context){
this.context = context;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Duel against " + enemy);
image = new ImageView(context);
image.setImageResource(R.drawable.duel_start);
builder.setView(image);
builder.setNegativeButton("BANG",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
System.out.println("********************BANG PREMUTO*************************");
if(timeToShot) {
endTime = SystemClock.elapsedRealtimeNanos();
ConnectionStream.getOut().println("TIME:" + String.valueOf(endTime - startTime));
}
else
ConnectionStream.getOut().println("TIME:LOSE");
}
});
alertDialog = builder.create();
}
public void start(){
((Activity)context).runOnUiThread(new Runnable(){//mostro la finestra
@Override
public void run(){
alertDialog.show();
}
});
new java.util.Timer().schedule(//timer per cambiare l'immagine
new java.util.TimerTask() {
@Override
public void run() {
((Activity)context).runOnUiThread(new Runnable(){
@Override
public void run(){
image.getLayoutParams().height = image.getHeight();
image.getLayoutParams().width = image.getWidth();
image.setImageResource(R.drawable.bang);
startTime = SystemClock.elapsedRealtimeNanos();
timeToShot = true;
}
});
}
}, 3000);
}
public void cancel(){
((Activity)context).runOnUiThread(new Runnable(){
@Override
public void run(){
alertDialog.dismiss();
}
});
}
}
所以我需要修复 onClickListener 和 cancel() 函数
使用这个警告框。它对我有用
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SettingActivity.this);
alertDialogBuilder.setMessage("Message");
alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//Code
dialog.cancel();
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
您需要致电
showDialog(int)
方法。
然后覆盖该方法
onCreateDialog(int)
在此创建对话框并设置正负按钮,然后它将起作用。
尽管这种方式已被弃用。你现在应该使用片段。不过你还是可以试试看!
检查此 link:https://developer.android.com/guide/topics/ui/dialogs.html