【问题标题】:Fragment not added after configuration change配置更改后未添加片段
【发布时间】:2017-06-23 21:18:01
【问题描述】:

我正在尝试在屏幕旋转后重新创建视图, 她我将“TestFragment”添加到一个活动中,屏幕旋转 onConfigurationChange() 被调用,在这里我执行 setcontextview() 以便重新创建视图并尝试用相同的实例替换现有的“TestFragment”。 但是没有添加片段,我能知道这段代码有什么问题吗?

public class TestFragmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Test", "onCreate");
        setContentView(R.layout.activity_test);
        createFragment();
    }

    private void createFragment(){
        Fragment fragment = getSupportFragmentManager().findFragmentByTag("TestFragment");
        if (fragment == null) {
            Log.d("Test", "not found");
            fragment = new TestFragment();

        }else {
            Log.d("Test", "found");
        }
        FragmentTransaction fragmentTransaction;
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame1, fragment, "TestFragment");
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commitAllowingStateLoss();
        getSupportFragmentManager().executePendingTransactions();
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d("Test", "onConfigurationChanged");
        setContentView(R.layout.activity_test);
        createFragment();
    }
}

    public class TestFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.test_fragment, null, false);
        return root;
    }

    @Override
    public void onDestroy() {
        Log.d("Test", "onDestroy TestFragment");
        super.onDestroy();
    }
}

【问题讨论】:

  • 在 Android 中,Activity 会在方向改变时默认重新创建。因此将重新创建视图。无需处理。不是正在发生吗?当您期望默认行为时,为什么要处理它?

标签: android android-fragments android-fragmentactivity


【解决方案1】:

将此添加到您的清单中

<activity
        android:name=".TestFragmentActivity"
        android:configChanges="orientation">   
</activity>

【讨论】:

  • 我已经添加了 android:configChanges="orientation|screenSize" 这个 onConfigChange 正在被调用,问题是片段没有被添加
【解决方案2】:

如果您在 Manifest 文件中定义 android:configChanges="orientation" 则无需调用 onConfigurationChanged() 方法,因为 Activity 将在方向更改时自动管理当前状态和内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多