2012-11-29 22 views
8

Verileri bir etkinlikten parçalara geçirirken sorun yaşıyorum. Etrafımı araştırdım ama durumuma iyi uyan bir cevap bulamadım. CurrentFragment.java ve HistoryFragment.java adında 2 parça sınıfım var. Bunları bir Etkinlikte sekmeler olarak başlatıyorum. Verilerden etkinliğe nasıl parça aktarılır

Tab tab = actionBar.newTab() 
      .setText(R.string.tab_current) 
      .setTabListener(new TaskitTabListener<CurrentFragment>(
        this, "current", CurrentFragment.class)); 
    actionBar.addTab(tab); 

    tab = actionBar.newTab() 
      .setText(R.string.tab_history) 
      .setTabListener(new TaskitTabListener<HistoryFragment>(
        this, "history", HistoryFragment.class)); 
    actionBar.addTab(tab); 

Ben parçaları Faaliyete içinde setArguments ve getArguments kullanmak söylendi. Fakat bu durumda, Faaliyette nasıl parça nesneler elde edebilirim? Parçalar programlı olarak eklendiğinden, getFragmentManager().findFragmentById() kullanamıyorum.

Ayrıca, Etkinlikler bölmesindeki verilere erişmek için getActivity() parçalarını kullanabileceğimi bildiren bazı yayınlar buluyorum, ancak benim için boş dönmeye devam ediyorum. Bunun çalışan bir örneği var mı?

+0

[onAttach] 'in getActivity() 'döner' null' (http://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach%28android yapar. app.Activity% 29) yöntemi? – svenkapudija

+0

Arkitleri TaskitTabListener.onTabSelected() öğesinde ayarlamaya çalışın. – faylon

+0

@svenkapudija Evet, "onAttach" içinde null ruturns. – OckhamTheRazor

cevap

7

[EDIT] Cevabınızı, sorunuzu daha iyi yanıtlamak için güncelledim.

Ayrıca fragmanları getFragmentManager().findFragmentByTag("tag") ile etiketlere de alabilirsiniz. Yine de dikkatli olun, eğer sekme henüz görüntülenmemişse parça mevcut olmayacaktır. Parçanın aktiviteden veri almasını istiyorsanız, etkinliğinizin aktiviteyi parça tarafından tanımlanan bir Arayüz uygulamış olmasını sağlayın. Parçalar için onAttach(Activity activity) yaşam döngüsü işlevinde, parçayı oluşturan etkinliğe erişebilirsiniz, böylece bu etkinliği tanımladığınız Arabirim olarak yayınlayabilir ve işlev çağrıları yapabilirsiniz.

public interface DataPullingInterface { 
    public String getData(); 
} 

Ardından sevdiği aktivitesinde arabirimini uygulamak: o (birçok parçaları arasında aynı arayüze paylaşmak istiyorsanız Ayrıca, arayüzün kendi dosyasını yapabilirsiniz) Bu gibi fragmanda arayüzü koymak yapmak için Bu:

public class MyActivity extends Activity implements DataPullingInterface { 
    // Your activity code here 
    public String getData() { 
     return "This is my data" 
    } 
} 

Nihayet CurrentFragment daki onAttach(Activity activity) yönteminde Eğer bu işlevleri çağırmak böylece oluşturulan arayüz olarak almak aktiviteyi attı.

private DataPullingInterface mHostInterface; 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if(D) Log.d(TAG, "onAttach"); 
    try { 
     mHostInterface = (DataPullingInterface) activity; 
    } catch(ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement DataPullingInterface"); 
    } 
    String myData = mHostInterface.getData();   
} 
+0

Cevabınız için teşekkürler, ancak "parça tarafından tanımlanan bir arayüz" ne anlama geldiğini açıklayabilir misiniz? – OckhamTheRazor

+0

Cevabımı güncelledim çünkü yorumlarda güzel kodlar yapamıyorum. Cevabınız için bir göz atın. –

+0

Awesome! Bu benim için çalışıyor. Yardım ettiğin için teşekkür ederim. – OckhamTheRazor

İlgili konular