Java Viewpager赢得';从工具栏上按“后退”按钮时不起作用

Java Viewpager赢得';从工具栏上按“后退”按钮时不起作用,java,android,android-fragments,android-viewpager,android-tablayout,Java,Android,Android Fragments,Android Viewpager,Android Tablayout,我试图尽可能地表达标题,但基本上在HomeActivity中,我有一个自定义菜单,其中有一堆片段。!其中一个是HomeFragment,它包含一个Tablelayout,由两个选项卡组成,带有一个viewpager 一切正常。!但是在菜单片段中,当用户单击工具栏上的后退按钮时,将返回到主页片段。 当从菜单中选择时,片段替换方法将完成我已经使用过的在片段之间替换的技巧 但是在这种情况下,HomeFragment会打开,而Tablayout没有响应!感觉碎片没有正确创建 我尝试使用同一活动的新意图,

我试图尽可能地表达标题,但基本上在HomeActivity中,我有一个自定义菜单,其中有一堆片段。!其中一个是
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()。不管怎样,我很高兴它帮助了你:)