Android 安卓另一个表格布局的选项卡内的表格布局

Android 安卓另一个表格布局的选项卡内的表格布局,android,android-fragments,android-viewpager,slide,android-tablayout,Android,Android Fragments,Android Viewpager,Slide,Android Tablayout,是否可能在另一个表格布局的选项卡中有一个表格布局?为了更好地解释,我创建了以下图像。所需的幻灯片移动如图所示 我的主要活动 Xml Fragment2\u A和Fragment2\u B XML和Java代码应该是怎样的?好的,所以在片段中只有TextView。现在,对于fragment_2放置另一个TabLayout和ViewPager(您不需要AppBar,也不需要Coordinator,它们将从活动的父布局中已经存在) frag2.xml <LinearLayout xml

是否可能在另一个表格布局的选项卡中有一个表格布局?为了更好地解释,我创建了以下图像。所需的幻灯片移动如图所示

我的主要活动

Xml


Fragment2\u A和Fragment2\u B XML和Java代码应该是怎样的?

好的,所以在片段中只有
TextView
。现在,对于
fragment_2
放置另一个
TabLayout
ViewPager
(您不需要
AppBar
,也不需要
Coordinator
,它们将从
活动的父布局中已经存在)

frag2.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.design.widget.TabLayout
        android:id="@+id/frag2_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/frag2_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"  />
</LinearLayout>


您必须创建
Frag2
Fragment
,在创建视图
OnCreateView
中使用上述布局初始化,然后为
Frag2\u viewpager
viewpager
类仅为
frag2a.xml
frag2b.xml
片段设置另一个适配器,他们可能会让我们只假设
TextView
s或其他内容<代码>表格布局
将被放置在上方、Frag2内部(以及
活动
中的一个,如图所示)

我知道这不是问题的直接答案,我可能会因此受到惩罚,但您不应该在选项卡中嵌套选项卡。谷歌使用的设计概念称为材料设计。选项卡的规则之一是不嵌套它们。以下是指向以下页面的链接:。我认为,作为开发者,我们必须遵循这一点,使Android平台尽可能的通用和令人惊叹

谢谢, 橡木

简单 一切都将保持不变就像您在活动中设置的查看页面一样。只需在片段中使用
getChildFragmentManager()
,而不是
getFragmentManager()

返回用于放置和管理片段的专用FragmentManager 在这个片段的内部

返回FragmentManager以与关联的片段进行交互 通过这个片段的活动


您可以查看完整的代码。

为什么不可能?我不明白还是怎么了?有什么问题吗?据我所知,将
ViewPager
放在另一个
ViewPager
内没有问题。默认行为如您所愿-当在
片段
内放置另一个
查看页面
时,它会“吞下”触摸事件直到边框,然后当它无法滑动时,它会将
运动事件
传递给家长。你能展示你的
R.layout.fragment_1
?你的
R.layout.fragment_2
应该包含另一个
TabLayout
和你自己的id@snachmsm用
R.layout.fragment\u 1
编辑的问题。对不起,我只是一个Android初学者,没有问题,只是我没有找到一个直接的解决方案。我的问题是,第一个布局是在活动中声明的,但第二个布局我不知道在哪里声明它,因为我有两个片段
fragment2a
fragment2b
,而不是活动。我必须在两个片段
fragment2a
fragment2b
中放置
TabLayout
?请参见编辑。简而言之:只需使用
Frag2
,在其中为另一个片段创建另一个适配器<代码>选项卡栏将仅是
Frag2
Frag2a
Frag2b
中的一个(另一个),可根据需要进行初始化。您的图片上的滑动功能(事实上是触摸事件传递)将在boxOk之外工作。如果我正确理解,我有3个片段用于此选项卡
RootFrag2
Frag2\u A
Frag2\u B
。最后两个是正常的片段。在根目录中,我为这两个片段创建了另一个适配器(我刚刚将主要活动改编为片段)。但是,在
setupViewPager
方法声明中,我使用
getSupportFragmentManager()
得到一个错误<代码>无法解析方法“getSupportFragmentManager()”。注意:您总是在
Fragment
中使用
getActivity()
方法,可能不需要(
((MainActivity)getActivity())。methodInsideMainActivity()
RecyclerView
对携带的
片段有自己的“内存”,默认设置为1。这意味着回收商在左右两侧保留一个视图/片段(当然是当前视图),以便在没有“延迟”的情况下平滑地滑动以绘制另一个整个屏幕。您可以使用增加此值。但是,如果你的应用程序崩溃了,这意味着你可能在Frag2或任何Frag2儿童中有bug,当
Fragment
被删除(分离)时会发生这种情况,我甚至一点也不知道,非常感谢你这么说,说实话。
public class MainActivity extends AppCompatActivity {

    private TabLayout tabLayout;

    private final static int[] tabIcons = {
            R.drawable.ic_tab_1,
            R.drawable.ic_tab_2,
            R.drawable.ic_tab_3,
            R.drawable.ic_tab_4
    };

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

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
        setupTabIcons();
    }

    private void setupTabIcons() {
        tabLayout.getTabAt(0).setIcon(tabIcons[0]);
        tabLayout.getTabAt(1).setIcon(tabIcons[1]);
        tabLayout.getTabAt(2).setIcon(tabIcons[2]);
        tabLayout.getTabAt(3).setIcon(tabIcons[3]);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new Fragment1());
        adapter.addFrag(new Fragment2());
        adapter.addFrag(new Fragment3());
        adapter.addFrag(new Fragment4());
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {

        private final List<Fragment> mFragmentList = new ArrayList<>();

        ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        void addFrag(Fragment fragment) {
            mFragmentList.add(fragment);
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@android:color/holo_blue_light"
    android:id="@+id/fragment_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="myContext">

    <TextView
        android:text="It is just a text."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>
public class Fragment1 extends Fragment {

    public Fragment1() { }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment.
        return inflater.inflate(R.layout.fragment_1, container, false);
    }
}
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.design.widget.TabLayout
        android:id="@+id/frag2_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/frag2_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"  />
</LinearLayout>