从工具栏按下后,Viewpager将无法正常工作
问题描述:
我试图将标题尽可能地短语,但基本上在HomeActivity内部,我有一个用于片段的自定义菜单。其中之一是HomeFragment
其中包含Tablelayout
的2个选项卡与viewpager
..!从工具栏按下后,Viewpager将无法正常工作
一切工作正常。但在菜单片段中,当用户单击工具栏上的后退按钮时,将返回到HomeFragment
。 一个片段替换方法将做的伎俩,我已经用它来代替之间的片段从菜单中选择!
但是在这种情况下,HomeFragment
尚未打开Tablayout
未响应!感觉就像片段没有正确创建!?
我尝试使用默认情况下打开HomeFragment
的同一活动的新意图,并打开它,但具有相同的问题。
的问题
守则
HomeFragment
// 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()的定义是: 返回一个专用的FragmentManager,用于放置和管理这个Fragment中的Fragments。
getFragmentManager()的定义是: 返回FragmentManager以与与此片段的活动关联的片段进行交互。
更换由getChildFragmentManager有getFragmentManager()()这行代码
TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager());
另外在菜单片段
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
它给我'java.lang.IllegalArgumentException异常:未找到ID视图0x7f0d008a(XXX.XXXX:id /容器)的片段GamesFragment {2b77c84#2 id = 0x7f0d008a}' –
GamesFragment在哪里? – Anonymous
这是菜单片段..!它的代码张贴在问题中!你为什么认为这个错误显示。 –