Android 设计问题-从TabLayout启动新片段

Android 设计问题-从TabLayout启动新片段,android,android-fragments,android-tablayout,Android,Android Fragments,Android Tablayout,我不太确定是否有解决以下设计问题的“最佳方法” 在我的主要活动中,我有一个包含两个选项卡的列表。每个选项卡都是一个不同的片段。我转到Tab1,看到片段1。我需要从片段1启动一个新片段(1A),但不确定最好的方法是什么?我在想其中一个 A) 将选项卡从my MainActivity中取出,并将其放置在单独的MainFragment中,该程序将随应用程序一起启动。这样,当用户启动片段1A时,它将仅用选项卡替换1个主片段 或 B) 将选项卡保留在MainActivity中,并找到在选项卡1下用片段1A

我不太确定是否有解决以下设计问题的“最佳方法”

在我的主要活动中,我有一个包含两个选项卡的列表。每个选项卡都是一个不同的片段。我转到Tab1,看到片段1。我需要从片段1启动一个新片段(1A),但不确定最好的方法是什么?我在想其中一个

A) 将选项卡从my MainActivity中取出,并将其放置在单独的MainFragment中,该程序将随应用程序一起启动。这样,当用户启动片段1A时,它将仅用选项卡替换1个主片段

B) 将选项卡保留在MainActivity中,并找到在选项卡1下用片段1A替换片段1的方法


如有任何建议,将不胜感激。谢谢。

我不太明白你想要什么,但可能是这个

使用FragmentPagerAdapter

public class TabsPagerAdapter extends FragmentPagerAdapter {
private static final int NUM_TABS = 3;

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

@Override
public Fragment getItem(int position) {
    switch(position){
        case 0:
            return Tab1Fragment.newInstance();
        case 1:
            return Tab2Fragment.newInstance();
        default:
            return Tab3Fragment.newInstance();
    }
}

@Override
public int getCount() {
    return NUM_TABS;
}

@Override
public CharSequence getPageTitle(int position) {

    if (position == 0){
        return "Tab 1";
    }

    if (position == 1){
        return "Tab 2";
    }

    return "Tab 3";
}
在你的活动中

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

    // Tabs
    TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    TabsPagerAdapter adapter = new TabsPagerAdapter(getSupportFragmentManager());

    pager.setAdapter(adapter);
    tabs.setupWithViewPager(pager);
}

我认为你不应该同时做到这两点。。。选项卡1下可见的Frag1应包含此视图的所有布局(包括初始隐藏)和逻辑。如果您需要显示smth new,它可能会更小(然后是弹出窗口、对话框等)或展开一些布局,可能会带有一些动画(您仍然可以在
片段
内部
查看页面
,禁用触摸事件并以编程方式操纵滚动…)

当用户选择的操作旨在向smth显示如此重要的内容,以至于根本不需要上一个屏幕时,您可能应该打开新的
活动


注:如果您坚持要替换当前的“屏幕”(实际上是
活动
s内容),请注意,表1的标题可能不代表Frag1A的内容。这完全取决于你有什么样的内容。您可以考虑移动<代码> TabPays<代码> >代码> CurryReVIEW ,例如“代码> FrAMELayOUT//Cult>容器,并添加到FLAG1A,覆盖整个前视图,包括选项卡。在当前的设计指南中,您甚至可以找到显示新片段的建议解决方案-使用圆形显示动画

我的问题是,使用您的答案,如果我转到选项卡1,现在想从那里启动一个新片段,我将如何做?例如,选项卡1包含名称的recyclerView和添加新名称的FAB。我单击晶圆厂添加一个新名称,并希望被带到另一个片段以输入此信息。我将如何添加这另一个片段?FAB旨在打开新的
活动
,因为它应该指向Appah okk的一个非常重要的功能,所以snachmsm回答了您的问题。你可以用only字段调用其他活动/片段,并将该值返回给你的片段..好吧,那么也许你可以帮我选择最佳路线..假设我需要在片段1中添加一个新名称,我的思维过程是启动一个新的东西来获取该数据(片段,AlertDialogue,Activity)--->在那里输入信息-->通过内容提供程序保存到数据库-->关闭屏幕,然后返回片段1,加载程序在其中重新填充RecyclerView。我最初的想法是在片段1中存在一个晶圆厂。我现在的问题是,我该怎么办?我应该启动一个全新的活动来获取名称输入吗?这在逻辑上是合理的,但我想知道这是否是最佳实践?谢谢。FAB显示为“小动作”,例如:当您单击FAB(浮动动作栏)时,您将全屏显示其他片段/活动,但根据材料设计,在显示单击FAB后,您通常不会返回到以前的视觉状态。。。我相信你不应该用晶圆厂。