2015-04-22 2 views
1

Я пытаюсь создать «вкладки» без использования библиотеки поддержки для моего приложения, но я не нашел даже простого рабочего примера/учебника в любом месте.Android-Создать вкладки внутри фрагмента без библиотеки поддержки v4

Поскольку все мое приложение использует android.app.fragment, поэтому я не могу изменить все существующие fragments на android.support.v4.app.Fragment.

Создание закладки внутри фрагмента с использованием библиотеки поддержки - это кусок торта, но мне интересно, можем ли мы создать один без android.support.v4.app.Fragment.

+0

Эй, братан, вы можете попробовать мой ответ ниже. У меня уже есть тест, и он работает для меня. – codezjx

ответ

3

Это может быть достигнуто, это легко, следовать мой шаг:

1.Копирование Offical исходный код FragmentTabHost для вашего проекта, а также изменить следующие три класса refrence: android.support.v4.app.Fragment к android.app.Fragment android.support.v4.app.FragmentManager к android.app.FragmentManager android.support.v4.app.FragmentTransaction до android.app.FragmentTransaction

2.Используйте версию проекта FragmentTabHost в проекте и забудьте библиотеку android.support.v4. Моя отредактированная версия: FragmentTabHost

Пример кода: (Показать первую вкладку, после задержки 5 сек, вы увидите вторую вкладку, я бегу на моем Android Studio успешно!)

MainActivity.java

public class MainActivity extends Activity { 

    FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTabHost = (FragmentTabHost) findViewById(R.id.tabhost); 
     mTabHost.setup(this, getFragmentManager(), R.id.container); 

     // Add each tab 
     mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("first"), BlankFragment1.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("second"), BlankFragment2.class, null); 


     mTabHost.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       mTabHost.setCurrentTabByTag("second"); 
      } 
     }, 5000); 
    } 

} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <com.example.bill.myapplication.FragmentTabHost 
     android:layout_width="match_parent" android:layout_height="match_parent" 
     android:id="@+id/tabhost"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

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

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

      <FrameLayout 
       android:id="@+id/container" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1"/> 
     </LinearLayout> 
    </com.example.bill.myapplication.FragmentTabHost> 

</RelativeLayout> 
+0

Здравствуйте, Билл, я хочу создать вкладки внутри фрагмента, а не активность (вы создаете его внутри MainActivity). Тем не менее, я использую тот же подход –

+0

Вы можете использовать модифицированную версию «FragmentTabHost» всюду, мой пример просто использует Activity. Вы также можете использовать Fragment, просто замените getFragmentManager() на getChildFragmentManager(). – codezjx

+0

Похоже, ваш подход 1 работает. Пожалуйста, обратитесь к моей теме. https://gist.github.com/ritesh-nitw/6555cf681c17770b7737 Только беспокоиться, что у меня есть предупреждение: Для вызова требуется уровень API 17 (текущий минимум: 15) android.app.fragment # getChildFragmentManager() –

0

Поместите фрагменты внутри содержимого вкладки в свой формат XML и добавьте их в TabHost в onCreate.

Смежные вопросы