2016-12-20 5 views
-2

Я пытаюсь создать вкладки внутри фрагмента. У меня есть фрагмент под названием «Food_layout.xml»Пример того, как создавать вкладки внутри фрагмента?

вот xml-файл.

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

    <TextView 
     android:text="Food Layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginLeft="149dp" 
     android:layout_marginStart="149dp" 
     android:layout_marginTop="199dp" 
     android:id="@+id/textView3" /> 

</RelativeLayout> 

Вот класс Java для фрагмента

package com.example.crims.plfitness; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class FoodFragment extends Fragment{ 
    View myView; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     myView = inflater.inflate(R.layout.food_layout, container, false); 
     return myView; 
    } 
} 

Я попытался добавить TabHost, но когда я запускаю программу она не отображалась. Мне сказали, что мне нужно использовать дочерний менеджер фрагментов. Я просмотрел его, но я действительно ничего не нашел о том, как его реализовать. Я новичок в разработке Android.

+0

что вы хотите сделать именно !? –

+1

http://stackoverflow.com/questions/20469877/adding-tab-inside-fragment-in-android http://stackoverflow.com/questions/25479980/creating-tabs-inside-fragment http://stackoverflow.com/questions/23988654/how-to-add-tab-inside-fragment-in-android http://stackoverflow.com/questions/34778063/viewpager-tabs-fragment-normal-fragments http://stackoverflow.com/questions/34428511/tablayout-with-viewpager-not-working-внутри-фрагмент-андроид http://stackoverflow.com/questions/35058819/android-tablayout-inside-fragment –

+0

поступают так же, как если бы вы добавили его в Activity, но везде, где вы должны писать 'getSupportFragmentManager()' write 'getChildFragmentManager()' вместо –

ответ

1

Я сделал так, Этот фрагмент содержит две вкладки, как вы можете видеть. (С адаптером)

public class TabFragment extends Fragment { 

public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 2; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    /** 
    *Inflate tab_layout and setup Views. 
    */ 
     View x = inflater.inflate(R.layout.tab_layout,null); 
     tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
     viewPager = (ViewPager) x.findViewById(R.id.viewpager); 

    /** 
    *Set an Apater for the View Pager 
    */ 
    viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 


    /** 
    * Now , this is a workaround , 
    * The setupWithViewPager dose't works without the runnable . 
    * Maybe a Support Library Bug . 
    */ 

    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
       tabLayout.setupWithViewPager(viewPager); 
       } 
    }); 

    return x; 

} 

class MyAdapter extends FragmentPagerAdapter{ 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /** 
    * Return fragment with respect to Position . 
    */ 

    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0: return new Fragment1(); 
      case 1 : return new Fragment2(); 

     } 
    return null; 
    } 

    @Override 
    public int getCount() { 

     return int_items; 

    } 

    /** 
    * This method returns the title of the tab according to the position. 
    */ 

    @Override 
    public CharSequence getPageTitle(int position) { 

     switch (position){ 
      case 0 : 
       return "frg1"; 
      case 1 : 
       return "frg2"; 

     } 
      return null; 
    } 
} 

} 

Вот layout из TabFragment.

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    app:tabGravity="fill" 
    app:tabMode="fixed" 
    android:background="@color/green_1" 
    app:tabIndicatorColor="@color/green_1" 
    app:tabSelectedTextColor="@color/white" 
    app:tabTextColor="@color/green_2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</android.support.design.widget.TabLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</android.support.v4.view.ViewPager> 

Вы можете добавить свой Fragment

+0

спасибо. Я немного смущен тем, что «TabFragment» заключается в том, что java-файл фрагмента? то есть это будет моя «FoodFragment.java»? – crims

+0

«TabFragment» - это тот, в который вы хотите добавить две «Фрагменты»/'Tab'. –

+0

Что такое R.id.tabs и R.id.viewpager? – crims