Android 安卓另一个表格布局的选项卡内的表格布局
是否可能在另一个表格布局的选项卡中有一个表格布局?为了更好地解释,我创建了以下图像。所需的幻灯片移动如图所示 我的主要活动 XmlAndroid 安卓另一个表格布局的选项卡内的表格布局,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
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>