【问题标题】:Retrieving Fragment by using Fragment Tag使用 Fragment Tag 检索 Fragment
【发布时间】:2015-04-30 11:29:52
【问题描述】:

在通过SupportFragmentManager 添加时定义的标签检索Fragment 时,我得到NullPointerException

代码如下:

 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

【问题讨论】:

  • NullPointer 出现在哪一行?日志?

标签: android android-fragments nullpointerexception fragment


【解决方案1】:

您必须等到交易执行完毕。将片段添加到事务后,您无法立即运行它。

.commit(); 是一个异步调用。

来自文档

安排此事务的提交。提交没有发生 立即地;它将被安排在主线程上工作 下次该线程准备好时完成。

作为测试,您可以运行executePendingTransactions () 以立即执行任何挂起的操作。

【讨论】:

    【解决方案2】:

    片段事务是异步任务,当您提交时,并不意味着它会立即添加,因此如果您希望事务立即发生,您必须调用executePendingTransactions()

    FragmentOne fragmentOne = new FragmentOne();
        getSupportFragmentManager().beginTransaction().add(R.id.container, fragmentOne,FRAGMENT_ONE_TAG).addToBackStack(null).commit();
    
    getSupportFragmentManager().executePendingTransactions();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多