2015-03-02 2 views
0

Bonjour à tous et merci d'avance pour votre aide.Attendre la boîte de dialogue Cliquez pour relancer une activité

J'ai deux activités. J'appelle un dialogue dans l'activité deux de l'activité un. La chose est que je veux que la boîte de dialogue redémarre l'activité un si le bouton positif est pressé, mais je ne peux pas voir comment le faire.

Ceci est mon code ...

Première activité:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) 
    { 
     Funciones Funciones1 = new Funciones(); 

     Funciones1.MuestraDialogo(CluefichaActivity.this); 

     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

Activité deux:

public class Funciones extends Activity 

{ private static final int DIALOGO = 1;

private AlertDialog.Builder ventana; 

Activity miActividad; 





@Override 
protected Dialog onCreateDialog(int id) 
{ 
    switch (id) 
    { 
     case DIALOGO: 
      ventana = new AlertDialog.Builder(miActividad); 

      ventana.setIcon(miActividad.getResources().getIdentifier("my_icon", "drawable", miActividad.getPackageName())); 
      ventana.setTitle("title"); 
      ventana.setMessage("message"); 

      ventana.setPositiveButton("OK", new DialogInterface.OnClickListener() 
       { 
        public void onClick(DialogInterface dialog, int boton) 
        { 
          Intent intent = miActividad.getIntent(); 
          miActividad.finish(); 
          startActivity(intent); 
        } 
       }); 
      } 

      ventana.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int boton) 
       { 
       } 
      }); 

      return ventana.create(); 
    } 

    return null; 
} 

... ...

public void MuestraDialogo (Activity actividad) 
{ 
    miActividad = actividad; 

    showDialog(DIALOGO); 
} 

Je reçois cette erreur quand je le lance ...

Process: com.myproject.projectname, PID: 1841 
java.lang.NullPointerException 
     at android.app.Activity.startActivityForResult(Activity.java:3511) 
     at android.app.Activity.startActivityForResult(Activity.java:3472) 
     at android.app.Activity.startActivity(Activity.java:3714) 
     at android.app.Activity.startActivity(Activity.java:3682) 
     at com.myproject.projectname.Funciones$1.onClick(Funciones.java:130) 
     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:157) 
     at android.app.ActivityThread.main(ActivityThread.java:5356) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
     at dalvik.system.NativeStart.main(Native Method) 

où "Funciones.java:130" est cette ligne de code: "startActivity (intention);"

Quelqu'un peut-il aider, s'il vous plaît? Merci!

+0

pratique de mauvaise programmation pour Android. Vous ne pouvez pas créer un constructeur d'activité, comme une classe Java normale. – user370305

+0

Je ne vous comprends pas, si vous pouviez être un peu plus clair s'il vous plaît – Mazinger

+0

'Funciones Funciones1 = new Funciones();' ici 'Funciones 'est-ce que l'activité est correcte? Vous ne pouvez donc pas créer d'objet d'activité comme Java class sous Android. – user370305

Répondre

1

Vous devez envoyer une émission (LocalBroadcast) à partir de votre boîte de dialogue sous-activité à votre activité principale et processus qui diffusent à fomenter la fin:

Dans votre principale Activity, dire MainActividad

static final String BROADCAST_ACTIVITY_CLOSE = "com.example.ACTIVITY_CLOSE_BROADCAST"; 

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent.getAction().equals(BROADCAST_ACTIVITY_CLOSE)) { 
      terminateCleanly(); 
      finish(); 
     } 
    } 
}; 

Ensuite, en onCreate:

LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(BROADCAST_ACTIVITY_CLOSE); 
    broadcastManager.registerReceiver(broadcastReceiver, intentFilter); 

Savès mettre à jour votre manifeste et je pense est plus propre.

Votre dialogue invoque ce avec:

   Intent RTReturn = new Intent(MainActividad.BROADCAST_ACTIVITY_CLOSE); 
       LocalBroadcastManager.getInstance(this).sendBroadcast(RTReturn); 
+0

Merci John, ça marche !, mais une chose, Android Studio me parle d'erreur dans votre code de ligne "terminateCleanly()", ne sais pas, alors je l'ai supprimé, et aussi, je ne voulais pas que l'activité terminer mais redémarrer, donc j'ai changé "finish()" pour mon morceau de code original "Intent intent1 = getIntent(); finish(); startActivity (intention1); " – Mazinger

+0

'terminateCleanly()' est le mien méthode, la seule chose que je voulais annoter/commenter. Il suffit de l'ignorer ou de la remplacer par finish ... finish quelque chose, avec l'id d'intention entière que vous appeliez 'startActivityForResult' dans votre boîte de dialogue, pour fermer celle-ci, si elle n'est pas déjà fermée. Eh oui, le redémarrage est presque fini, donc interchangeable, j'appelle en fait 'recreate();' pour redémarrer mon activité après la reconfiguration. – John

+0

OK, je pensais que terminateCleanly() il pourrait être une méthode Android de tout API que je ne savais pas. – Mazinger

2

Le problème que vous avez l'intention est de votre ancienne activité est nulle une fois que vous appelez la fin sur elle. Bien que la réponse de John soit une façon plus simple de se terminer, le problème que vous avez est de recommencer l'activité.

Essayez de remplacer

Intent intent = miActividad.getIntent(); 
startActivity(intent); 

avec

Intent newIntent = new Intent(Funciones.this, CluefichaActivity.class); 
startActivity(newIntent); 
+0

Merci Dave mais j'avais déjà essayé cela et cela n'a pas fonctionné, jette la même erreur "null pointeur". – Mazinger