使用片段标记检索片段

时间:2015-04-30 11:29:53

标签: android android-fragments nullpointerexception fragment

我在通过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

2 个答案:

答案 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();