如何在片段中创建选项卡的示例?

Posted

技术标签:

【中文标题】如何在片段中创建选项卡的示例?【英文标题】:An example of how to create tabs within a fragment? 【发布时间】:2017-05-05 07:39:47 【问题描述】:

我正在尝试在片段中创建选项卡。我有一个名为“Food_layout.xml”的片段

这里是xml文件。

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

    <TextView
        android:text="Food Layout"
        android:layout_
        android:layout_
        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开发的新手。

【问题讨论】:

你到底想做什么!? ***.com/questions/20469877/…***.com/questions/25479980/…***.com/questions/23988654/…***.com/questions/34778063/…***.com/questions/34428511/…***.com/questions/35058819/… 执行与将其添加到 Activity 相同的方式,但在任何地方,您会写 getSupportFragmentManager() 改为写 getChildFragmentManager() @RuchaBhatt 如标题中所述如何在片段内添加选项卡的示例。 @MikeM。我以前看过那些,它们没有多大帮助,我会再看一遍。也许自从我上次看到它们以来我学到了一些东西。 【参考方案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;
    



这是 TabFragment 的layout

<?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_
    android:layout_>
</android.support.design.widget.TabLayout>

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

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

您可以添加您的Fragment

【讨论】:

谢谢。我对“TabFragment”有点困惑,是那个片段的java文件吗?即那会是我的“FoodFragment.java”吗? TabFragment 是您要添加两个 Fragments/Tab 的那个。 什么是 R.id.tabs 和 R.id.viewpager? xml文件复制到你的 我的 java 文件仍然有问题。 ViewPager 中的 setAdapter (android.support.v4.view.PagerAdapter) 无法应用于 (com.example.crims.plfitness.FoodFragment.MyAdapter)

以上是关于如何在片段中创建选项卡的示例?的主要内容,如果未能解决你的问题,请参考以下文章

React Native - 尝试在反应导航中创建一个带有选项卡导航器的抽屉,而不呈现选项卡的抽屉项目

listview 没有在带有 viewpager 选项卡的片段中刷新

如何在作为选项卡的 2 个片段之间共享视图模型

如何在每个导航选项卡的片段内创建 2 个片段

显示 ActionBar 选项卡的两个片段

如何在片段内创建选项卡?