2017-08-26 40 views
-1

我有這個AlertDialog應該是兩個玩家之間的決鬥。它顯示了一個決鬥的圖像,並在三秒鐘後,由於計時器,它顯示「BANG」圖像。當出現「BANG」圖像時,玩家必須按下「BANG」按鈕並且潰敗者獲勝。我的問題是,按鈕上的監聽器不工作,我不能關閉alertDialog。這是代碼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和取消()函數

回答

2

你需要調用 showDialog(int)方法。 然後覆蓋方法 onCreateDialog(int)這裏面創建對話框,並設置正面和負面的按鈕,然後它將工作。

雖然這種方式已被棄用。你現在應該使用片段。但是你仍然可以嘗試一下!
查看該鏈接:https://developer.android.com/guide/topics/ui/dialogs.html

+0

終於有人設法以好的方式回答,謝謝! –

1

使用此警告框。它的工作對我來說

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();