2015-03-02 4 views
0

Приветствуем всех и благодарим за помощь.Ждите ответа на диалог, чтобы перезапустить мероприятие

У меня есть два вида деятельности. Я вызываю диалог в действии два от первого действия. Дело в том, что я хочу, чтобы диалоговое окно перезапустило действие 1, если нажата положительная кнопка, но я не могу увидеть, как это сделать.

Это мой код ...

активность один:

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

активность два:

public class Funciones extends Activity 

{ частных статических окончательное ИНТ Diálogo = 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); 
} 

Я получаю эту ошибку, когда я запускаю его ...

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) 

где "Funciones.java:130" это линия кода: «startActivity (намерение)»;

Может кто-нибудь помочь, пожалуйста? Благодаря!

+0

Bad практике программирования для Android. Вы не можете создавать конструктор активности, как обычный класс Java. – user370305

+0

Я не понимаю вас, если вы можете быть немного более ясными, пожалуйста, – Mazinger

+0

'Funciones Funciones1 = new Funciones();' здесь 'Funciones' - это право деятельности? Таким образом, вы не можете создать объект активности, такой как Java-класс в Android. – user370305

ответ

1

Вы должны послать широковещательный (LocalBroadcast) из вашего диалога суб-активность к вашей основной деятельности и процесса, который транслируется на подстрекают прекращение:

в главном Activity, скажем 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(); 
     } 
    } 
}; 

Тогда в onCreate:

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

Сохраняет обновление манифеста, и я думаю, что чище.

Ваш диалог вызывает это с:

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

Спасибо, Джон, это работает !, но одна вещь, Android Studio рассказывает мне об ошибке в вашем коде строки «terminateCleanly()», не знаю, поэтому я удалил ее, а также, я не хотел, чтобы активность закончить, но перезапустить, поэтому я изменил «финиш»() для моего исходного кода «Intent intent1 = getIntent(); finish(); startActivity (intent1); « – Mazinger

+0

'terminateCleanly()' is my own метод, единственное, что я хотел комментировать или комментировать. Просто проигнорируйте его или замените его завершением. Закончите что-то, с целым идентификатором цели, который вы использовали для вызова 'startActivityForResult' в вашем диалоговом окне, чтобы закрыть это тоже, если он еще не закрыт. Да, перезапуск yep почти закончен настолько взаимозаменяемым, на самом деле я вызываю 'recreate();' для перезапуска моей активности после реконфигурации. – John

+0

ОК, я думал, что terminateCleanly() это может быть Android-метод от любого Api, которого я не знал. – Mazinger

2

Проблема у вас есть намерение вашей старой деятельности является недействительным, как только вы вызываете закончить на этом. Хотя ответ Джона является более чистым способом прекращения, проблема, с которой вы сталкиваетесь, снова начинает работу.

Попробуйте заменить

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

с

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

Спасибо Дэйву, но я уже пробовал это, и он не работал, бросает ту же ошибку «нулевой указатель». – Mazinger

Смежные вопросы