从工具栏按回时 Viewpager 将不起作用
Viewpager won't work when pressing back from a toolbar
我试着尽可能地表达标题,但基本上在 HomeActivity 中我有一个自定义菜单,其中有一堆片段。!其中之一是 HomeFragment
,它包含一个 Tablelayout
的 2 个选项卡和一个 viewpager
..!
一切正常。!但是在菜单片段里面,当用户点击工具栏上的后退按钮时是return到HomeFragment
。
片段替换方法将完成我在从菜单中选择时已经使用它在片段之间替换的技巧!?
但在这种情况下,HomeFragment
打开但 Tablayout
没有响应!感觉片段创建不正确!?
我尝试使用默认打开 HomeFragment
的相同 activity 的新 intent,它打开它但遇到同样的问题..!
问题
代码
主页片段
// code..
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
InitViews(rootView);
TabLayoutAdapter adapter = new TabLayoutAdapter(getFragmentManager());
pager.setAdapter(adapter);
tabLayout.setupWithViewPager(pager);
return rootView;
}
// code..
菜单片段
// code..
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.to_home:
replaceFragment(new HomeFragment());
// tried this and it's the same problem
// startActivity(new Intent(getActivity(), HomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void replaceFragment(Fragment fragment) {
android.support.v4.app.FragmentTransaction t = getFragmentManager().beginTransaction();
t.replace(R.id.Container, fragment);
t.commit();
}
// code..
查看代码,我认为您必须使用 getChildFragmentManager() 而不是 getFragmentManager() 并将其用于片段事务。
getChildFragmentManager()的定义是:
Return 一个私有的 FragmentManager,用于在此 Fragment 中放置和管理 Fragment。
getFragmentManager() 的定义是:
Return FragmentManager 用于与与此片段相关联的片段进行交互 activity。
将具有 getFragmentManager() 的这行代码替换为 getChildFragmentManager()
TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager());
也在菜单片段中
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
我试着尽可能地表达标题,但基本上在 HomeActivity 中我有一个自定义菜单,其中有一堆片段。!其中之一是 HomeFragment
,它包含一个 Tablelayout
的 2 个选项卡和一个 viewpager
..!
一切正常。!但是在菜单片段里面,当用户点击工具栏上的后退按钮时是return到HomeFragment
。
片段替换方法将完成我在从菜单中选择时已经使用它在片段之间替换的技巧!?
但在这种情况下,HomeFragment
打开但 Tablayout
没有响应!感觉片段创建不正确!?
我尝试使用默认打开 HomeFragment
的相同 activity 的新 intent,它打开它但遇到同样的问题..!
问题
代码
主页片段
// code..
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
InitViews(rootView);
TabLayoutAdapter adapter = new TabLayoutAdapter(getFragmentManager());
pager.setAdapter(adapter);
tabLayout.setupWithViewPager(pager);
return rootView;
}
// code..
菜单片段
// code..
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.to_home:
replaceFragment(new HomeFragment());
// tried this and it's the same problem
// startActivity(new Intent(getActivity(), HomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void replaceFragment(Fragment fragment) {
android.support.v4.app.FragmentTransaction t = getFragmentManager().beginTransaction();
t.replace(R.id.Container, fragment);
t.commit();
}
// code..
查看代码,我认为您必须使用 getChildFragmentManager() 而不是 getFragmentManager() 并将其用于片段事务。
getChildFragmentManager()的定义是: Return 一个私有的 FragmentManager,用于在此 Fragment 中放置和管理 Fragment。
getFragmentManager() 的定义是: Return FragmentManager 用于与与此片段相关联的片段进行交互 activity。
将具有 getFragmentManager() 的这行代码替换为 getChildFragmentManager()
TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager());
也在菜单片段中
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();