2012-06-21 19 views
6

iki faaliyetleri, Activity1 ve Activity2 olduğunu varsayalım tamamlandıktan sonra iletişim göstermek için nasıl. Belli bir düğmeye basıldığındaandroid - etkinlik

Activity1 en onClick() yönteminde

, biz Aktivite 2 başlatmak için bir çağrısı: bitirmek sonra

Intent myIntent = new Intent(Activity1.this, Activity2.class); 
Activity1.this.startActivity(myIntent); 

() Activity2 içinde denir ve Activity1 devam edilir, bir ihtiyacım Devam edildikten sonra, Aktivite1'de gösterilecek iletişim kutusu.

önce, basitçe denilen showDialog Activity1 en onClick aynı blokta (id)() yöntemi:

public void onClick(View v) { 
    if(v == addHole){ 
    //... 
    Intent myIntent = new Intent(Activity1.this, Activity2.class); 
    Activity1.this.startActivity(myIntent); 
    showDialog(END_DIALOG_ID); 
    } 
} 

konu Activity1 çağrıldıktan sonra, END_DIALOG_ID tekabül iletişim görünmüyorsa, ama, olduğu Ekran, tuşa basılıncaya kadar kararır ve yanıt vermiyor (iletişim kutusu mevcut gibi).

Ben Activity1 en onResume() ve onRestart() yöntemleri showDialog() çağrısını koyarak çalıştı, ancak programı çökmesine bu ikisi var.

Ayrıca, Event2'de bir AsyncTask yöntemi oluşturmayı denedim ve showDialog() çağrısı onPostExecute() öğesinde, ancak bu ileti Activity2'de görünmez.

private class ShowDialogTask extends AsyncTask<Void, Void, Integer> { 
    /** The system calls this to perform work in a worker thread and 
    * delivers it the parameters given to AsyncTask.execute() */ 
    protected Integer doInBackground(Void... id) { 
     //do nothing 
     return END_DIALOG_ID; 
    } 

    /** The system calls this to perform work in the UI thread and delivers 
    * the result from doInBackground() */ 
    protected void onPostExecute(Integer id) { 
     super.onPostExecute(id); 
     showDialog(id); 

    } 
} 

Şimdi gelen setResult() ve Activity1 dan onActivityResult() yöntemleri ile

Activity1.this.startActivityForResult(myIntent, END_DIALOG_REQUEST); 

arayarak bu uygulamaya çalışıyorum, ama bu uygulamaktan daha iyi bir uygulama olması gerektiğini görünüyor. Tek ihtiyacım olan, Activity2 bitirme işleminde gösterilen bir diyaloğa sahip olmak.

Sağladığınız her türlü yardım için teşekkür ederiz. Eğer önermek gibi Activity2 başlatırken

+1

Ben startActivityForResult ve onActivityResult önerecektim, ancak kendi üzerine keşfettim görünüyor. Bana göre, istediğini elde etmenin en kolay yolu bu. – mportuesisf

cevap

7

, startActivityForResult diyoruz. Ardından, onActivityResult'u geçersiz kılın ve RESULT_OK için denetleyin ve iletişim kutunuzu gösterin. Yapmak istediğiniz şeyi yapmak için mükemmel kabul edilebilir bir uygulamadır. , MainActivity potansiyel kapanış çeşitli etkinlikler ve sonra iletişim göstermek - (u'r activity2 bir şey aramıyorum ise)

+0

Teşekkürler. Bu geçersiz kılma gibi en iyi cevap olarak görünüyor 'onResume()' iletişim neden Activity1 ilk başlatıldığında gösterilecek ve 'onRestart()' uygulama odağı kaybederse gösterilmesini iletişim kutusu neden olur. StartActivityForResult işlevinin kullanılması, yalnızca Activity2 tamamlandığında (veya BACK tuşuyla iptal edildiğinde) iletişim kutusunu göstermede daha iyi görünüyor. Tekrar teşekkürler! – avoyles

+0

Rica ederim. Akılda tutulması gereken bir diğer şey, 'onResume()' sonra geri etkinliğe kullanıcı başka bir uygulamanın (telefon, mesajlaşma, her neyse) giderse denir ve olacak olmasıdır. – wsanville

+0

Hmm, evet. İyi bir noktaya değindin.Ama bence StartActivityForResult'un daha iyi çalışacağını düşünüyorum, çünkü sadece Activity2 tamamlandıktan ve Activity1'in odaklanmasından sonra iletişim kutusunun gösterilmesini istiyorum. Diyalog bir zaman damgası almak içindir ve Activity2'nin geçişi sırasında Etkinlik1'e geri dönmesi gerekir. – avoyles

0

Sen

@Override 
public void onResume(){ 
    super.onResume(); 
    //do something 
} 
+0

onResume() öğesindeki showDialog() öğesini kullanmak, Activity1 ilk oluşturulduğunda iletişim kutusunun görüntülenmesine de neden olur. – avoyles

+0

Bununla birlikte, onResume yerine onRestart kullanılarak istendiği gibi çalışır. Bunu daha önce denediğimde 'super.onRestart() 'ı çağırmayı unuttum. Hangi durumlarda Activity2 tamamlandıktan sonra onRestart() çağrılırken endişelenmem gerekebilir? – avoyles

+0

"onRestart()" işlevinde kullanacağınız her değişkenin daha önceden başlatılmış/yeniden başlatıldığından emin olmanız veya "NullPointerException" değerini atması gerekir. – Hein

0

Ben kök faaliyeti dönmek zorunda yöntemi onResume kullanabilirsiniz. Bu yüzden alternatif bir yol seçtim.

MyDialog { 
    public static synchronized void planToShowDialog(String info) { 
     if (info != null) { 
      saveInfoToPreferences(info); 
     } 
    } 

    public static synchronized void showDialogIfNecessary(Context context) { 
     String info = readInfoFromPreferences(); 
     if (info != null) { 
      saveInfoToPreferences(null); // Show dialog once for given info. 
      new MyDialog(context, info).show(); 
     } 
    } 

    private static String readInfoFromPreferences() { 
     //... 
    } 

    private static void saveInfoToPreferences(String info) { 
     //... 
    } 
} 

I() metodu MainActivity.onPostResume den MyDialog.showDialogIfNecessary() arayın.

İlgili konular