【问题标题】:Why getSupportFragmentManager().findFragmentByTag returns null after rotation?为什么 getSupportFragmentManager().findFragmentByTag 在旋转后返回 null?
【发布时间】:2017-02-07 21:24:49
【问题描述】:

我正在尝试制作一个包含Activity 和两个Fragments 的应用。任何Fragment都可以调用Activity实现的接口方法:

@Override
public void onFragmentRequest(final String fragmentTag) {

  new Thread(new Runnable() {
      @Override
      public void run() {
          try {
              // simulate network connection
              Thread.sleep(3000);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }

          runOnUiThread(new Runnable() {
              @Override
              public void run() {
                Fragment fragment = getSupportFragmentManager()
                        .findFragmentByTag(fragmentTag);

                if(fragment == null)
                    Log.d(TAG, "fragment is null");
                else {
                    if(fragment instanceof OnFragmentResponse)
                        ((OnFragmentResponse) fragment).onFragmentResponse();
                }
              }
          });
      }
  }).start();

}

但问题是在调用onFragmentRequest 并让设备旋转getSupportFragmentManager().findFragmentByTag(fragmentTag) 后返回null

我替换并添加到后台堆栈的所有片段,毕竟我调用了commit 方法和manager.executePendingTransactions(),但它没有帮助

轮换前或未轮换的日志:

02-07 16:39:12.202 29750-29750/com.testfrag3 D/MainActivity: onFragmentRequest: fragmentTag = NewsFragment
02-07 16:39:12.203 29750-29750/com.testfrag3 D/MainActivity: getSupportFragmentManager.entryCount = 1
02-07 16:39:12.203 29750-29750/com.testfrag3 D/NewsFragment: onFragmentResponse success

调用onFragmentRequest和设备旋转时的日志:

02-07 16:39:23.454 29750-29750/com.testfrag3 D/MainActivity: onFragmentRequest: fragmentTag = NewsFragment
02-07 16:39:23.454 29750-29750/com.testfrag3 D/MainActivity: getSupportFragmentManager.entryCount = 1
02-07 16:39:23.454 29750-29750/com.testfrag3 D/MainActivity: fragment is null

【问题讨论】:

    标签: android android-fragments fragmentmanager


    【解决方案1】:

    试试这个:

    getSupportFragmentManager().executePendingTranscation();
    

    【讨论】:

    • 对不起,我默认这样做。我必须编辑我的答案。
    • @Trancer 你在 fragmentTag 中收到了什么吗?
    • 是的,像这样:MainActivity: onFragmentRequest: fragmentTag = NewsFragment MainActivity: getSupportFragmentManager.entryCount = 1 MainActivity: fragment is null
    • 看到这个我认为这可以帮助您解决问题stackoverflow.com/questions/5164126/…
    • 好的,我已经编辑了我的帖子并显示了我有问题的方法的完整代码
    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多