Probleme mit AlertDialog

S

scrats

Neues Mitglied
0
Wie immer mach ich was falsch und komme nicht drauf!

Die Idee war wenn man gewinnt, soll mit AlertDialog gezeigt werbden Gewonnen, bzw Verloren und dann das Spiel beenden (finish()) wieder zurück ins Hauptmenu.

Code:
protected Dialog onCreateDialog(int id) {

        AlertDialog.Builder builder;
        Log.v(TAG, "onCreateDialog");
        switch(id) {
        case DIALOG_WIN:
            Log.v(TAG, "Dialog: gewonnen");
            builder = new AlertDialog.Builder(this);
            builder.setMessage("Gewonnen");
            builder.setCancelable(false);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           Log.v(TAG, "Dialog: Fehler?4");
                           finish();
                       }
                   });
            dialog = builder.create();
            break;
        case DIALOG_LOSE:
            Log.v(TAG, "Dialog: verloren");
            builder = new AlertDialog.Builder(this);
            builder.setMessage("Verlooooooooren")
                   .setCancelable(false)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           finish();
                       }
                   });
            dialog = builder.create();
            break;
        default:
            dialog = null;
        }
        return dialog;
    }
Dies in der Activity Klasse drin und funktioniert auch!
Aufrufen utu ich es so:

showDialog(0);

jetzt zu dem Problem:
Beim ersten mal Spielen funktioniert alles normal. Ich Gewinne es kommt die Meldung. Ich drücke den Button und komme wieder ins Hauptmenu. Mach ich ein neues Spiel und gewinne(bzw. verliere) dieses stürzt die Aktivity ab.

Meine vermutung liegt darin das der alte Dialog noch existiert. Ich habe es verucht bei der onDestroy mit:

diablog.dismiss();
oder
diablog.cancel();

beides funktioniert nicht!

***
hier mal der FehlerCode ab dort wo ich aufrufe hab ich alles abgeschnitten
Code:
02-03 23:25:06.127: ERROR/AndroidRuntime(745): Uncaught handler: thread main exiting due to uncaught exception
02-03 23:25:06.157: ERROR/AndroidRuntime(745): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@435c9318 is not valid; is your activity running?
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.view.ViewRoot.setView(ViewRoot.java:425)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:178)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.view.Window$LocalWindowManager.addView(Window.java:392)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.app.Dialog.show(Dialog.java:231)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at android.app.Activity.showDialog(Activity.java:2407)
02-03 23:25:06.157: ERROR/AndroidRuntime(745):     at com.pse.View.graphics2D.PlayArea2D.update(PlayArea2D.java:286)
 
Zuletzt bearbeitet:
Der Aufruf von AlertDialog ist nicht blockend, was heißt, du rufst showDialog(0) auf und er macht dann gleich mit dem was darunter kommt weiter!

Vielleicht kommt dein Problem ja daher, dass du später etwas schließt, worauf er nach dem zweiten Aufruf von showDialog(x) wieder zugreifen möchte und dann die Exception fliegt?
 
Habe ein ähnliches Problem. Im TextView steht eine Telefonnummer die ich ändern können möchte. Es wird der Button "Ändern" geklickt, dann geht ein AlertDialog auf und man kann in der Eingabezeile die Telefonnummer ändern.


Quellcode der Activity:
Code:
package boe.project.liftcall;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;

public class SetActivity extends Activity
{
 TextView tvPhoneNo;
 Button butAendern;
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_settings);
  
  Toast.makeText(getBaseContext(), "onCreate", Toast.LENGTH_SHORT).show();
  tvPhoneNo = (TextView)findViewById(R.id.tvPhoneNo);
  butAendern = (Button)findViewById(R.id.butAendern);
 
  //Anlegen des AlertDialogs
  final AlertDialog.Builder alert = new AlertDialog.Builder(this);
  alert.setTitle("SMS-Relais");
  alert.setMessage("Bitte Rufnummer eingeben.");
  final EditText input = new EditText(this);
  input.setInputType(InputType.TYPE_CLASS_PHONE);
  alert.setView(input);
    
   alert.setPositiveButton("OK", new DialogInterface.OnClickListener() 
   {
    @Override
    public void onClick(DialogInterface dialog, int which) 
    {
     tvPhoneNo.setText(input.getText());
    }
   });
  
   alert.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener()
   {
    @Override
    public void onClick(DialogInterface dialog, int which)
    {  
    }
   }); 
   
  butAendern.setOnClickListener(new View.OnClickListener()
  {
   @Override
   public void onClick(View v) 
   {
    alert.show();
   }
  });  
 } 
}

Fehlercode aus dem LogCat:
Code:
09-23 13:47:10.489: E/AndroidRuntime(732): FATAL EXCEPTION: main
09-23 13:47:10.489: E/AndroidRuntime(732): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.view.ViewGroup.addView(ViewGroup.java:1871)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.view.ViewGroup.addView(ViewGroup.java:1851)
09-23 13:47:10.489: E/AndroidRuntime(732):  at com.android.internal.app.AlertController.setupView(AlertController.java:365)
09-23 13:47:10.489: E/AndroidRuntime(732):  at com.android.internal.app.AlertController.installContent(AlertController.java:206)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.app.AlertDialog.onCreate(AlertDialog.java:251)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.app.Dialog.show(Dialog.java:225)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
09-23 13:47:10.489: E/AndroidRuntime(732):  at boe.project.liftcall.SetActivity$3.onClick(SetActivity.java:64)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.view.View.performClick(View.java:2485)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.view.View$PerformClick.run(View.java:9080)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.os.Handler.handleCallback(Handler.java:587)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.os.Looper.loop(Looper.java:123)
09-23 13:47:10.489: E/AndroidRuntime(732):  at android.app.ActivityThread.main(ActivityThread.java:3683)
09-23 13:47:10.489: E/AndroidRuntime(732):  at java.lang.reflect.Method.invokeNative(Native Method)
09-23 13:47:10.489: E/AndroidRuntime(732):  at java.lang.reflect.Method.invoke(Method.java:507)
09-23 13:47:10.489: E/AndroidRuntime(732):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-23 13:47:10.489: E/AndroidRuntime(732):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-23 13:47:10.489: E/AndroidRuntime(732):  at dalvik.system.NativeStart.main(Native Method)
 

Ähnliche Themen

J
  • Juleru
Antworten
8
Aufrufe
497
Juleru
J
S
Antworten
4
Aufrufe
995
Sempervivum
S
R
Antworten
3
Aufrufe
1.631
Ritartet
R
Zurück
Oben Unten