2016-04-05 24 views
0

Şu anda ana etkinlikteki kartlar aracılığıyla bir json dosyası görüntüleyen bir uygulama geliştiriyorum. Sekmeli etkinliğimde hangi sekmede seçili olduğuna bağlı olarak, json dosyasını indiren bir yöntem, hangi json dosyasının indirileceğine karar verir (bir tam sayı iletir ve yöntemde bir anahtar vardır). getItem, GetCount ve getPageTitle:Sekmeli etkinliğin şu anda seçili sekmesini alma

Fragment.Downloadjson(rootview,integer,context); 

Şimdi benim sekmeli Aktivitesi ben her zamanki şeyler olan bir SectionsPagerAdapter vardır: İşte

yöntemdir.

GetItem yılında benim yeni parçalarını oluşturma:

@Override 
     public Fragment getItem(int position) { 
      View v1 = getWindow().getDecorView().getRootView(); 
      switch (position) { 
       case 0: 
        //Fragment.Download(v1,0,getApplicationContext()); 
        return new Fragment().f(Fragment.page.TODAY); 
       case 1: 
        //Fragment.Download(v1,1,getApplicationContext()); 
        return new Fragment().f(Fragment.page.TOMORROW); 
       default: 
        return new Fragment(); 
      } 
     } 

İstisna: o çalışır, çünkü benim yönteminde rootview parametre olarak bu hatanın kaynağını bulduk

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

Bir parametre olarak rootView10 ile onCreateView, çünkü orada tanımladım. Hovewer, ben yapamaz bir eğer seçili sekme veya orada görüntülenmekte fragman için açıklamada, çünkü

a) seçili sekmesi

b nasıl bilmiyorum) Ben emin değilim Ben sekme geçiş sonrasında sonuçta ise deyim Yani

onCreateView

olacağını, çünkü tekrar json dosyasını indirmek istiyorum, benim sorum,

nasıl bu çözmek?

+0

Geçerli sekme almak için bu bağlantıyı kontrol edin http://stackoverflow.com/questions/3583405/get-index-of-selected-tab-in-tabhost –

+0

@BrahmamYamani Tabaktivitem yok, önceden hazırlanmış kullanıyorum android stüdyosundan _tabbed activity_. Bunun için Tabhost'u kullanamam. –

cevap

1

getItem() yönteminin içinde yapma. getItem'da sadece parçayı oluşturun.

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return new MyFragment0(); 
     case 1: 
      return new MyFragment1(); 
     case 2: 
      return new MyFragment2(); 
    } 
    return null; 
} 

geçersiz kılma yöntemi instantiateItem ve orada bir parçanın haritası ve konumlarını korumak:

private ArrayMap<Integer, MyFragmentBaseClass> mPagerFragmentMap = new ArrayMap<>(); 


    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     MyFragmentBaseClass fragment = (MyFragmentBaseClass) super.instantiateItem(container, position); 
     mPagerFragmentMap.put(position, fragment); 

     return fragment; 
    } 

notMyFragmentBaseClass tüm fragmanları uygulamak bir işaretleyici arabirimi olabilir.

Yukarıdaki kodla, her parçayı sekmesine önceden eşleyebilirsiniz.

Eğer şimdi setOnTabSelectedListener kullanarak bir dinleyici ayarlayın ve kullanıcı seçtiğinde bilmek yöntemlerini onTabSelected birini kullanabilirsiniz TabLayout kullanıyorsanız o sekme ve istediğiniz herhangi bir işlemi gerçekleştirmek.

+0

Ve Tablayout'um yoksa? –

+1

Bu bağlıdır. Sekmeleri uygulamak için ne kullanıyorsunuz? İhtiyacınız olan tek şey sekme seçimini algılayabilmektir. –

+0

Kullanımdan kaldırılan Tablistener ve tüm kullanımdan kaldırılan sekme yöntemleri (Yeni bir etkinlik oluşturduğunuzda, "sekmeli etkinlik" ön ayarı var, kullandığım budur). Bu örnek, geçerli parçayı döndürdüğünden, sekmeyi değiştirdiğimde bir şeyler yapan bir yönteme ihtiyacım olurdu. Bunu nasıl yaparım? –