2013-05-23 5 views
5

tab layout with fragments oluşturmaya çalışıyorum. Öğe tıklamasıyla ilgili başka bir parça eklediğimde, bunun üzerinde başka bir parça göstermesi gerekir. Hedefe ulaşamıyorum. Fragman sadece mevcut olanın üstüne gider, ancak her iki fragman içeriği de görünür durumdadır. Lütfen açıklama için herhangi bir geliştirici sayfasına bağlantıyı atmayın. İşte Mevcut parçaya başka bir parça nasıl eklenir?

kodum

home_activity.xml

<TabHost 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 
     </TabWidget> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 

      <fragment 
       android:id="@+id/tab1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       class="com.example.tabsfragment.School_Fragment" > 
      </fragment> 

      <fragment 
       android:id="@+id/tab2" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       class="com.example.tabsfragment.Sports_Fragment" > 
      </fragment> 
     </FrameLayout> 
    </LinearLayout> 
</TabHost> 

Home_Activity.java

012 olduğunu

entertainment.xml

<FrameLayout 
    android:id="@+id/frameContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 
</FrameLayout> 

Ben burada Sports_Fragment

@Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     Entertainment_Fragment enFragment = new Entertainment_Fragment(); 
     ft.replace(android.R.id.tabcontent, enFragment); 
     ft.commit(); 
    } 

list_item_click başka parçasını ekliyorum inci olduğunu E anlık:

Screenshot

Herhangi bir fikir/açıklama ile yardımcı derece mutluluk duyacağız.

Teşekkürler! Her şeyden

+0

deneyebilirsiniz Ben parçaları * ile sekme düzeni oluşturmak çalışıyorum * - don 't. Sekmeler olarak fragmanlar çalışma zamanında eklenmelidir. – Luksprog

+0

@ Luksprog Peki bunu yapmanın yolu nedir? Herhangi bir örnek plz – moDev

+0

@droid dev sherlockActiionBar değil özel swipeTabs + viewpager uyguladık. Eğer daha sonra burada çözüm gönderebilirim.Programı uygulamak kolaydır.Ama bu, parçayı dinamik olarak ekleyememenizdir. Bu size kalmış. – TheFlash

cevap

7

Birincisi,

"Sen düzeni dosyasında statik olarak tanımlanmış bir fragman yerini alamaz. Yalnızca bir FragmentTransaction aracılığıyla dinamik eklenen parçaları yerine" ... Bu kayda değer olduğunu düşünüyorum

bakınız

Android: can't replace one fragment with another

How can I show a new Fragment within a single tab?

İşte çözüm.

home_activity.xml dosyasında, sekmesini boş bırakmanız gerekir.

<FrameLayout 
     android:id="@+id/tabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

Kişisel Home_Activity sizin onIemClick (Sports_Fragment) olarak

private FragmentTabHost mHost; 

public void changeFragment() { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    EntertainmentFragment enFragment = new EntertainmentFragment(); 
    ft.replace(R.id.tabcontent, enFragment); 
    ft.commit(); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
    mHost.setup(this, getSupportFragmentManager(), R.id.tabcontent); 
    mHost.addTab(mHost.newTabSpec("School") 
      .setIndicator("School"), SchoolFragment.class, null); 
    mHost.addTab(mHost.newTabSpec("Sport") 
      .setIndicator("Sport"), SportsFragment.class, null); 
} 

Kodunuzla dayanan bu

MainActivity mainAct = (MainActivity)getActivity(); 
      mainAct.changeFragment(); 

Benim tam projeyi ekleyin here olduğunu.

Kodunuzu test ettiğimde TabHost'un neden çalışmadığını kontrol etme şansım olmadı. Ama FragmentTabHost benim için iyi çalışıyor.

Düzenleme: örtüşme sorunu çözmek için, OnTabChangeListener ayarlayabilirsiniz:

backpress Hakkında
mHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 

     @Override 
     public void onTabChanged(String tabId) { 
      // TODO Auto-generated method stub 
      if (tabId.equalsIgnoreCase("School")) { 
       Log.v(TAG, "school"); 
       FragmentTransaction ft = getSupportFragmentManager() 
         .beginTransaction(); 
       schoolFrag = new SchoolFragment(); 
       ft.replace(R.id.tabcontent, schoolFrag); 
       ft.commit(); 
      } 
      if (tabId.equalsIgnoreCase("Sport")) { 
       Log.v(TAG, "Sport"); 
       FragmentTransaction ft = getSupportFragmentManager() 
         .beginTransaction(); 
       SportsFragment sportFrag = new SportsFragment(); 
       ft.replace(R.id.tabcontent, sportFrag); 
       ft.commit(); 
      } 
     } 

    }); 

, sen

ft.addToBackStack(null); 
+0

Çalışıyor, ancak başka bir sekmeye geçtiğimde, yalnızca o andaki parçanın üstüne biniyor. – moDev

+0

Bir sekmede birden çok parçam varsa, o zaman backpress kullanarak önceki parçaya nasıl dönülür ?? – moDev

+0

Şu an işteyim. Bir şansım olduğunda size geri döneceğim. – pt2121