我在通过NullPointerException
添加期间定义的标记检索Fragment
时收到SupportFragmentManager
。
以下是代码:
FragmentOne fragmentOne = new FragmentOne();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragmentOne,FRAGMENT_ONE_TAG).addToBackStack(null).commit();
FragmentOne fragmentOneInstance = (FragmentOne) getSupportFragmentManager().findFragmentByTag(FRAGMENT_ONE_TAG);
Log.i("Fragment One Instance: ", fragmentOneInstance.getTag());
错误报告:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.demo.fragment/com.ms.android.demo.fragment.MainActivity}: java.lang.NullPointerException
答案 0 :(得分:1)
你必须等到交易执行完毕。将片段添加到事务后,您无法立即运行它。
.commit();
是异步调用。
来自文档
计划此交易的提交。提交不会发生 立即;它将被安排为主线程上的工作 下次线程准备就绪时完成。
作为测试,您可以运行executePendingTransactions ()
立即执行任何挂起的操作。
答案 1 :(得分:0)
片段事务是异步任务,当您提交时,并不意味着它会立即添加,因此如果您希望立即执行事务,则必须调用executePendingTransactions()
FragmentOne fragmentOne = new FragmentOne();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragmentOne,FRAGMENT_ONE_TAG).addToBackStack(null).commit();
getSupportFragmentManager().executePendingTransactions();