我有一个UI少片段。我已经设置了setRetainInstance。我想知道为什么onResume或onPause永远不会被调用。
答案 0 :(得分:1)
我写了一个简单的测试证明 无头的onPause()
和onResume()
(没有用户界面)保留片段获取调用对应主机Activity
的生命周期,只需按预期:
public class MainActivity extends Activity {
protected static final String TAG = MainActivity.class.getName();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager mgr = getFragmentManager();
Fragment f = mgr.findFragmentByTag("mytag");
if(f == null){
f = new UILess();
mgr.beginTransaction().add(f, "mytag").commit();
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "paused");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "resumes");
}
}
UILess
片段如下:
public class UILess extends Fragment {
public static final String TAG = UILess.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onPause() {
super.onPause();
Log.e(TAG, "paused");
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "resumes");
}
}
这个简化的(删除的包等) logcat 输出显示两个方法都运行(由设备旋转时的配置更改触发),无论片段是否无头< /强>:
04-16 13:47:39.840 E/MainActivity﹕ resumes
04-16 13:47:39.855 E/UILess﹕ resumes
04-16 13:47:48.623 E/UILess﹕ paused
04-16 13:47:48.623 E/MainActivity﹕ paused
04-16 13:47:48.751 E/MainActivity﹕ resumes
04-16 13:47:48.754 E/UILess﹕ resumes