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