我不太确定是否有最好的方式"解决以下设计问题。
我的MainActivity中有一个带有2个标签的Tablayout。每个标签都是不同的片段。我转到Tab1并看到Fragment1。我需要从Fragment 1发布一个新的片段(1A),我不确定最好的方法吗?我在考虑其中一个。
A)从我的MainActivity中取出标签,并将它们放在一个单独的MainFragment中,该主页随应用程序启动。这样,当用户启动Fragment 1A时,它只用选项卡替换1 MainFragment。
或
B)将标签保留在MainActivity中,并在Tab1下找到用Fragment 1A替换Fragment 1的方法。
任何建议将不胜感激。谢谢。
答案 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);
}