2013-08-16 3 views
7

Bazı sekmelerle bir FragmentActivity yazdım. startActivityForResult ile (kullanıcı tercihlerini ayarlamak için kullandığım) ek bir aktivite (FragmentActivity veya ListFragment içinde fark yoksa) çağırdığımda, bu tercih aktivitesini başlattığımda onActivityResult yöntemi çağrılır, ancak bunu bitirdiğimde değil Ben bunu beklerdim (yine FragmentActivity veya ListFragment içinde hiçbir fark yoktur). Tercih etkinliğini bitirdikten sonra bu yöntem hiç çağrılmaz.onActivityResult, Etkinlik başlatıldığında çağrılır, bitmiş olduğu zaman değil

Sorunum, tercih etkinliğimi tamamladıktan sonra geçerli sekiğimi (ve son kullanılan sekme kimliğini ayarla) yenilemek ve bunu onActivityResult yönteminde yapabilmeyi umduğumdur.

protected void forwardToPreferences(int currentTab){    
     Intent intent = new Intent(getActivity(), GlobalPreferencesActivity.class); 
     getActivity().startActivityForResult(intent, 10); 
} 

bundan sonra çağrılan yöntemdir:

public abstract class ListFragmentBase<I> extends ListFragment implements 
LoaderCallbacks<List<I>> { 

bu sınıf içinde tercih etkinliğe beni yönlendirme yöntemidir:

bu

tercihi-etkinliği oluşturmaya sınıftır Yukarıdaki yöntemin çağrılması ancak çağrılan aktiviteyi bitirdikten sonra değil (

Bu tercih-faaliyettir:

public class GlobalPreferencesActivity extends Activity { 

ve i bitirmek yöntemini çağırmak nasıl gördükleri sınıf içinde:

TextView confirmSettings = (TextView) view.findViewById(R.id.confirm_settings); 
confirmSettings.setTextSize(PreferenceHelper.getSizeHeader(getApplicationContext())); 
    confirmSettings.findViewById(R.id.confirm_settings).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) {  
      if(BaseFragmentActivity.lastActivity != null){ 
       BaseFragmentActivity.lastActivity.onRefreshData(); 
     } 
      ComponentName callingActivity = getCallingActivity(); 
      GlobalPreferencesActivity.this.finish(); 
     } 
    }); 
+0

Posta kodu ve logcat çıkışı. – Squonk

+1

Özel problemimi Android: launchMode = "standart" olarak AndroidManifest.xml tercihli aktivitesi için ekleyerek düzeltebilirim (daha önce - ListFragements gibi - "singleInstance" olarak ayarlanmış). ama startActivityForResult'un davranışı benim için hala çok garip. – richard

+0

özür dilerim, ilk kez kod ekledim, biraz zaman aldı. ve şimdi logcat'ı doğru şekilde biçimlendirmek ve eklemek zorundayım. – richard

cevap

3

O

onActivityResult() called prematurely

Android'in bir hata olduğunu ve

Why does result from startActivityForResult come before activity really starts?

Kullanabileceğin hangi sürümü biliyorum ve çözüldü edilmişse/senin çağıran AndroidManifest dosyasında SingleInstance olmadığından emin aktiviteyi olun

+0

çalışıyor teşekkürler teşekkürler Eğer bana yardım ederse, ama kesinlikle aynı problem. stackoverflow'un kullanımı ile ilgili deneyimsiz sorularım için üzgünüm, ama sorumu şimdi yinelemeli olarak işaretlemem gerekiyor mu (eğer evet: nasıl)? – richard

+0

@Richard sorun değil, endişelenmeyin. En azından aynı sıkıntıya sahip olmadığınızı gördünüz ;-). Eğer cevap verdiğimi düşünüyorsanız, cevabımı doğrulayabilirsin, böylece başkalarının sorunun cevabını bilmesini sağla. – HpTerm

7

düzeltilmiş değil. Onun singleTop veya standart olduğundan emin olun. Bu onStart sonra çağrılan

+0

Hallelujah, işe yaradı! Kötü bir hata, niyetim sonuca ulaşmak için kamera kullanarak Android 4.3'te benim projemde görünür. – Pelanes

+0

Ben başlatma modu olarak 'singleTask' vardı. – Libin

+0

kaldırılırsa çalışır. Söz konusu etkinlik bir sistem "Ayarlar" etkinliği ise ne olur? – TheRealChx101

0

onActivityResult yanı sizin için çalışacaktır

Umut,

temel nedeni zaman bitirmek uğramadan başka bir etkinliğe etkinlik adresinin atlama. Daha sonra son aktivite, On-off durumuna geçti.

OnStop sonra, start start yöntem çağrısı ardından onActivityResult denir.