设计问题 - 从TabLayout

时间:2017-03-12 22:20:46

标签: android android-fragments android-tablayout

我不太确定是否有最好的方式"解决以下设计问题。

我的MainActivity中有一个带有2个标签的Tablayout。每个标签都是不同的片段。我转到Tab1并看到Fragment1。我需要从Fragment 1发布一个新的片段(1A),我不确定最好的方法吗?我在考虑其中一个。

A)从我的MainActivity中取出标签,并将它们放在一个单独的MainFragment中,该主页随应用程序启动。这样,当用户启动Fragment 1A时,它只用选项卡替换1 MainFragment。

B)将标签保留在MainActivity中,并在Tab1下找到用Fragment 1A替换Fragment 1的方法。

任何建议将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你不应该同时做两个要点......在Tab1下可见的Frag1应包含该视图的所有布局(包括初始隐藏)和逻辑。如果你需要显示新的smth它可能更小(然后弹出,对话框等)或扩展一些布局,也许有一些动画(你仍然可以在ViewPager Fragment里面使用ViewPager ,禁用触摸事件并以编程方式操作滚动...)。

如果用户选择的操作旨在显示smth 那么多重要,则根本不需要上一个屏幕,那么您应该打开新的Activity

PS。如果您坚持要替换当前的“屏幕”(事实上Activity的内容),请注意Tab1的标题可能不代表包含Frag1A的内容。这取决于你在那里有什么样的内容。您可以考虑将TabLayout / RecyclerView移至例如FrameLayout容器,并添加Frag1A覆盖整个上一个视图,包括选项卡。在当前的设计指南中,您甚至可以找到显示新片段的方法的建议解决方案 - 使用圆形显示动画

答案 1 :(得分:0)

我不太了解你想要什么,但可能是这个。

使用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);
}