Android FragmentManager.findFragmentByTag()的奇怪行为

Android FragmentManager.findFragmentByTag()的奇怪行为,android,android-fragments,Android,Android Fragments,好的,今天我注意到findFragmentByTag()有一个奇怪的行为:如果我旋转屏幕一次,片段返回正确,但是在第二次旋转时,我总是得到null。我做错什么了吗?有办法解决这个问题吗 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l

好的,今天我注意到findFragmentByTag()有一个奇怪的行为:如果我旋转屏幕一次,片段返回正确,但是在第二次旋转时,我总是得到null。我做错什么了吗?有办法解决这个问题吗

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        FragmentManager fm = getSupportFragmentManager();
        Fragment f = fm.findFragmentByTag("frag");
        if (f == null){
            Log.e("Fragment","null");
            f = new Fragment();
        }
        f.setRetainInstance(true);
        fm.beginTransaction().remove(f).add(f, "frag").commit();

    }

尝试调用
setRetainInstance(true)在片段的
onCreate()
中,并将上面的代码更改为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstance == null){
        FragmentManager fm = getSupportFragmentManager();
        Fragment f = new Fragment();
        fm.beginTransaction().add(f, "frag").commit();
    }
}

同时设置id以在布局视图组中显示它

尝试调用
setRetainInstance(true)在片段的
onCreate()
中,并将上面的代码更改为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstance == null){
        FragmentManager fm = getSupportFragmentManager();
        Fragment f = new Fragment();
        fm.beginTransaction().add(f, "frag").commit();
    }
}

同时设置id以在布局视图组中显示它

尝试调用
setRetainInstance(true)在片段的
onCreate()
中,并将上面的代码更改为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstance == null){
        FragmentManager fm = getSupportFragmentManager();
        Fragment f = new Fragment();
        fm.beginTransaction().add(f, "frag").commit();
    }
}

同时设置id以在布局视图组中显示它

尝试调用
setRetainInstance(true)在片段的
onCreate()
中,并将上面的代码更改为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstance == null){
        FragmentManager fm = getSupportFragmentManager();
        Fragment f = new Fragment();
        fm.beginTransaction().add(f, "frag").commit();
    }
}

同时设置id以在布局视图组中显示它

谢谢,您的回答让我找到了解决方案,因为我需要调用片段上的一些方法,我需要通过findFragmentByTag“检索”它。看起来,如果你删除并读取一个片段,它的标签将不会因为某种原因而被设置。很高兴我能帮上忙。。。别忘了投票并接受答案谢谢,您的回答让我找到了解决方案,因为我需要调用片段上的一些方法,我需要通过findFragmentByTag“检索”它。看起来,如果你删除并读取一个片段,它的标签将不会因为某种原因而被设置。很高兴我能帮上忙。。。别忘了投票并接受答案谢谢,您的回答让我找到了解决方案,因为我需要调用片段上的一些方法,我需要通过findFragmentByTag“检索”它。看起来,如果你删除并读取一个片段,它的标签将不会因为某种原因而被设置。很高兴我能帮上忙。。。别忘了投票并接受答案谢谢,您的回答让我找到了解决方案,因为我需要调用片段上的一些方法,我需要通过findFragmentByTag“检索”它。看起来,如果你删除并读取一个片段,它的标签将不会因为某种原因而被设置。很高兴我能帮上忙。。。别忘了投票并接受答案