Java Viewpager赢得';从工具栏上按“后退”按钮时不起作用
我试图尽可能地表达标题,但基本上在HomeActivity中,我有一个自定义菜单,其中有一堆片段。!其中一个是Java Viewpager赢得';从工具栏上按“后退”按钮时不起作用,java,android,android-fragments,android-viewpager,android-tablayout,Java,Android,Android Fragments,Android Viewpager,Android Tablayout,我试图尽可能地表达标题,但基本上在HomeActivity中,我有一个自定义菜单,其中有一堆片段。!其中一个是HomeFragment,它包含一个Tablelayout,由两个选项卡组成,带有一个viewpager 一切正常。!但是在菜单片段中,当用户单击工具栏上的后退按钮时,将返回到主页片段。 当从菜单中选择时,片段替换方法将完成我已经使用过的在片段之间替换的技巧 但是在这种情况下,HomeFragment会打开,而Tablayout没有响应!感觉碎片没有正确创建 我尝试使用同一活动的新意图,
HomeFragment
,它包含一个Tablelayout
,由两个选项卡组成,带有一个viewpager
一切正常。!但是在菜单片段中,当用户单击工具栏上的后退按钮时,将返回到主页片段。
当从菜单中选择时,片段替换方法将完成我已经使用过的在片段之间替换的技巧
但是在这种情况下,HomeFragment
会打开,而Tablayout
没有响应!感觉碎片没有正确创建
我尝试使用同一活动的新意图,默认情况下打开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..
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
菜单片段
// 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..
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
查看代码,我认为您必须使用getChildFragmentManager()而不是getFragmentManager(),并将其用于片段事务
getChildFragmentManager()的定义是:
返回一个私有FragmentManager,用于在此片段中放置和管理片段
getFragmentManager()的定义是:
返回FragmentManager,以便与与此片段的活动关联的片段进行交互
用getChildFragmentManager()替换具有getFragmentManager()的这行代码
也在菜单片段中
// 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..
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
查看代码,我认为您必须使用getChildFragmentManager()而不是getFragmentManager(),并将其用于片段事务
getChildFragmentManager()的定义是:
返回一个私有FragmentManager,用于在此片段中放置和管理片段
getFragmentManager()的定义是:
返回FragmentManager,以便与与此片段的活动关联的片段进行交互
用getChildFragmentManager()替换具有getFragmentManager()的这行代码
也在菜单片段中
// 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..
android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction();
它给我提供了java.lang.IllegalArgumentException:找不到片段游戏片段{2b77c84#2 id=0x7f0d008a}的id 0x7f0d008a(XXX.XXXX:id/Container)的视图
该游戏片段在哪里?它是菜单片段。。!它的代码张贴在问题中!你认为这个错误为什么会显现出来。!?R.id.Container是框架布局,出现在MenuFragment中,对吗?哦,不..看到你的代码我以为你在使用..这就是为什么我建议你使用getSupportManager()而不是getManager()。无论如何,我很高兴它帮助了你:)它给了我java.lang.IllegalArgumentException:没有找到片段游戏片段{2b77c84#2 id=0x7f0d08a}的id 0x7f0d08a(XXX.XXXX:id/Container)的视图
该游戏片段在哪里?它是菜单片段。。!它的代码张贴在问题中!你认为这个错误为什么会显现出来。!?R.id.Container是框架布局,出现在MenuFragment中,对吗?哦,不..看到你的代码我以为你在使用..这就是为什么我建议你使用getSupportManager()而不是getManager()。不管怎样,我很高兴它帮助了你:)