【问题标题】:Start Fragment via function in MainActivity通过 MainActivity 中的函数启动 Fragment
【发布时间】:2020-04-05 19:34:01
【问题描述】:

我正在尝试以编程方式启动片段。下面的功能可以自己正常工作。这里的问题是,我必须从另一个片段中调用该函数。从片段到 MainActivity 的调用有效,不是问题。

public void gotoFragment1(){
    Fragment1 fragment = new Fragment1();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.nav_host_fragment, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

如果我尝试从另一个片段调用该函数,应用程序将崩溃并显示以下堆栈跟踪:

java.lang.IllegalStateException: FragmentManager has not been attached to a host.
    at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1727)
    at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:321)
    at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:286)
    at com.fewo.info.MainActivity.gotoVeranstaltungen(MainActivity.java:134)
    at com.fewo.info.ui.home.HomeFragment$1.onClick(HomeFragment.java:53)

如何通过从另一个片段中调用此代码来更改片段?

【问题讨论】:

  • 你什么时候调用这个代码?您是否尝试过使用childFragmentManager 而不是supportFragmentManager
  • fragment A 通过 ActivityOne 调用 Fragment B

标签: android android-fragments fragment call


【解决方案1】:

如果你想从其他片段中替换MainActivity中的片段,你可以在你的片段中进行(不需要从MainActivity调用函数), 在你的片段中使用它:

getFragmentManager().beginTransaction()
            .replace(R.id.nav_host_fragment, new Fragment1(), FragmentLoanList.class.getName()).addToBackStack(null)
            .commit();

【讨论】:

    【解决方案2】:

    片段 A:

    ((ActivityOne) getActivity()).callFragmentB();
    

    活动一

    public void callFragmentB(){
       //run your fragment transaction To B here
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多