2017-08-26 1 views
-1

Ich habe diesen AlertDialog, der ein Duell zwischen zwei Spielern sein sollte. Es zeigt ein Bild eines Duells und nach drei Sekunden zeigt es dank eines Timers ein "BANG" -Bild an. Wenn das "BANG" -Bild erscheint, muss der Spieler die "BANG" -Taste drücken und der Fester gewinnt. Mein Problem ist, dass der Listener auf der Schaltfläche nicht funktioniert und ich kann den Alarmdialog nicht schließen. Dies ist der CodeAlertDialog-Taste funktioniert nicht und es wird nicht

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

ich die OnClickListener So müssen fixieren und die cancel() Funktion

Antwort

2

Sie müssen die showDialog(int) Methode aufzurufen. Dann überschreiben Sie die Methode onCreateDialog(int) innerhalb dieser erstellen Sie den Dialog und stellen Sie die positiven und negativen Tasten und dann wird es funktionieren.

Obwohl dieser Weg veraltet ist. Sie sollten jetzt Fragmente verwenden. Aber trotzdem kannst du es versuchen!
Überprüfen Sie diesen Link: https://developer.android.com/guide/topics/ui/dialogs.html

+0

Endlich jemand, der es geschafft, auf eine gute Weise zu beantworten, danke! –

1

Verwenden Sie diese Warnmeldung. Seine Arbeit für mich

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