2015-04-16 5 views
0

Я пытаюсь создать вкладки внутри фрагмента. Мне удается создать вкладку внутри фрагмента, но теперь я хочу загрузить другой фрагмент для каждой вкладки (фрагмент1.class и фрагмент2.class).Как загрузить представление фрагмента на вкладке

Может кто-нибудь предложить, как я могу загрузить каждый фрагмент на соответствующие вкладки?

Ниже представлен мой главный фрагмент, который держит вкладки.

Большое спасибо!

public class BusFragment extends Fragment { 

    private TabHost mTabHost; 
    View rootView; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      rootView = inflater.inflate(R.layout.fragment_bus, container, false); 
      mTabHost = (TabHost) rootView.findViewById(R.id.tabHost); 
      mTabHost.setup(); 

      TabHost.TabSpec spec = mTabHost.newTabSpec("tag"); 
      spec.setIndicator("Fragment1"); 
      spec.setContent(new TabHost.TabContentFactory() { 

       @Override 
       public View createTabContent(String tag) { 
        // TODO Auto-generated method stub 
        return (new AnalogClock(getActivity())); 

       } 
      }); 
      mTabHost.addTab(spec); 

      spec = mTabHost.newTabSpec("tag1"); 
      spec.setIndicator("Fragment2"); 
      spec.setContent(new TabHost.TabContentFactory() { 

       @Override 
       public View createTabContent(String tag) { 
        // TODO Auto-generated method stub 
        return (new AnalogClock(getActivity())); 
       } 
      }); 
      mTabHost.addTab(spec); 

      spec = mTabHost.newTabSpec("tag2"); 
      spec.setIndicator("Fragment3"); 
      spec.setContent(new TabHost.TabContentFactory() { 

       @Override 
       public View createTabContent(String tag) { 
        // TODO Auto-generated method stub 
        return (new AnalogClock(getActivity())); 
       } 
      }); 
      mTabHost.addTab(spec); 

      return rootView; 
     } 
} 

ответ

0

Hello Если вы хотите загрузить фрагмент внутри андроида фрагмента, выделите диспетчер детского фрагмента вместо обычного менеджера фрагментов. У меня была та же проблема, что и фрагмент внутри этой вкладки, когда на вкладке требуется загрузить разные фрагменты. см. следующие шаги, надеюсь, вам поможет.

Шаг 1. Смотрите, у меня есть StatisticsFragment с ним layout fragment_statistics.

public class StatisticsFragment extends Fragment { 

    private FragmentTabHost mTabHost; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_statistics,container, false); 
     mTabHost = (FragmentTabHost) rootView.findViewById(R.id.tabhost); 

     mTabHost.setup(getActivity(), getChildFragmentManager(),R.id.tabFrameLayout); 
     mTabHost.addTab(mTabHost.newTabSpec("WEEK").setIndicator(buildTabLayout(EnumStatistics.WEEKLY)),WeekFragment_.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("ALL").setIndicator(buildTabLayout(EnumStatistics.ALL)),DetailedFragment_.class, null); 

     mTabHost.getTabWidget().getChildAt(0).setOnClickListener(new WeekTabClick()); 

     mTabHost.getTabWidget().getChildAt(1).setOnClickListener(new AllTabClick()); 

     return rootView; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
    } 

    private View buildTabLayout(EnumStatistics enumStatistics) { 
     View tab; 
     if (enumStatistics == EnumStatistics.WEEKLY) { 
      tab = getActivity().getLayoutInflater().inflate(R.layout.tab_week_layout, null); 
     } else if (enumStatistics == EnumStatistics.MONTHLY) { 
      tab = getActivity().getLayoutInflater().inflate(R.layout.tab_month_layout, null); 
     } else if (enumStatistics == EnumStatistics.YEAR) { 
      tab = getActivity().getLayoutInflater().inflate(R.layout.tab_year_layout, null); 
     } else { 
      tab = getActivity().getLayoutInflater().inflate(R.layout.tab_detailed_layout, null); 
     } 
     return tab; 
    } 



    public class WeekTabClick implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 

      mTabHost.getTabWidget().focusCurrentTab(0); 
      FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 
      ft.replace(R.id.tabFrameLayout, WeekFragment_.instantiate(getActivity(), WeekFragment_.class.getName())); 
      ft.addToBackStack(null); 
      ft.commit(); 

     } 
    } 

    public class AllTabClick implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 

      mTabHost.getTabWidget().focusCurrentTab(1); 
      FragmentTransaction ft = getChildFragmentManager() 
        .beginTransaction(); 
      ft.replace(R.id.tabFrameLayout, DetailedFragment_.instantiate(
        getActivity(), DetailedFragment_.class.getName())); 
      ft.addToBackStack(null); 
      ft.commit(); 

     } 
    } 
} 

В выше buildTabLayout функции намерения построить пользовательский макет вкладки виджета вы можете поместить простой текст или изображение, которое вы хотите, чтобы показать внутри вкладки виджета.

Шаги 2. fragment_statistics.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:relaxis="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <android.support.v4.app.FragmentTabHost 
     android:id="@+id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/croutonview" 
     android:gravity="center" > 

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

      <TabWidget 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="48dp" 
       android:orientation="horizontal" 
       /> 

      <FrameLayout 
       android:id="@+id/tabFrameLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 
     </LinearLayout> 
    </android.support.v4.app.FragmentTabHost> 

</RelativeLayout> 

Как вы видите выше внутри макета tabFrameLayout мы загружаем фрагмент всего ребенка Programmaticly.

Дайте мне знать, если у вас есть вопросы и сомнения. спасибо