【发布时间】: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