Android 版面在屏幕旋转时自动复制
我有一个布局,有一个编辑文本和一个按钮。我Android 版面在屏幕旋转时自动复制,android,android-layout,android-edittext,Android,Android Layout,Android Edittext,我有一个布局,有一个编辑文本和一个按钮。我将它放在我的主布局中 我对布局和旋转有一个奇怪的问题。当设备(物理设备)旋转时,它似乎会复制自身,弄乱文本和布局 这里是第一次打开,在我添加了一些额外的杂音之后: DSC0013在片段启动时出现在编辑文本中 然后,我旋转手机并添加一些不同的杂音: 你可以很清楚地看到这个问题。起初,我以为这只是编辑的文字弄乱了。但如果我添加了足够的文本来换行: 我可以看到按钮也被弄乱了 我确实重写了saveInstanceState上的,但在其中我不涉及EditTe
将它放在我的主布局中
我对布局和旋转有一个奇怪的问题。当设备(物理设备)旋转时,它似乎会复制自身,弄乱文本和布局
这里是第一次打开,在我添加了一些额外的杂音之后:
DSC0013在片段启动时出现在编辑文本中
然后,我旋转手机并添加一些不同的杂音:
你可以很清楚地看到这个问题。起初,我以为这只是编辑的文字弄乱了。但如果我添加了足够的文本来换行:
我可以看到按钮也被弄乱了
我确实重写了saveInstanceState上的,但在其中我不涉及EditText或它的值,它严格用于其他内容
发生了什么?我该如何修复它?修复了它
结果不是视图本身复制,也不是编辑文本或按钮复制。那是整个碎片
在我的活动的onCreate
中,我将片段添加到xml布局中:
private FileDetails fileDetailsFragment;
public void onCreate(Bundle savedInstanceState) {
...
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fileDetailsFragment = new FileDetails(fileData);
fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment);
fragmentTransaction.commit();
每次我旋转手机时,都会呼叫onCreate
(按原意)。所以我检查了一下,看看这个活动是否是第一次运行的,而且效果很好
private FileDetails fileDetailsFragment;
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fileDetailsFragment = new FileDetails(fileData);
fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment);
fragmentTransaction.commit();
} else {
fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder);
}
您还可以在片段上设置RetainedInstance(true),然后尝试获取片段形式de FragmentManager.findFragmentById(int)或FragmentManager.findFragmentByTag(String),如果它返回null,则意味着您必须创建片段的新实例
private FileDetails fileDetailsFragment;
public void onCreate(Bundle savedInstanceState) {
...
FragmentManager fragmentManager = getSupportFragmentManager();
fileDetailsFragment = (FileDetails) getSupportFragmentManager().findFragmentById(R.id.DetailsHolder);
if (fileDetailsFragment == null) {
fileDetailsFragment = new FileDetails(FileData);
}
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment);
fragmentTransaction.commit();
}
在某些情况下,savedInstanceState的值在旋转后可能为null,因此最好添加另一个条件:
FragmentManager fragmentManager = getSupportFragmentManager();
if (savedInstanceState == null &&
fragmentManager.getFragments().size() == 0) {
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fileDetailsFragment = new FileDetails(fileData);
fragmentTransaction.add(R.id.DetailsHolder, fileDetailsFragment);
fragmentTransaction.commit();
} else {
fileDetailsFragment = (FileDetails)
getSupportFragmentManager().findFragmentById(R.id.DetailsHolder);
}
如何设置视图<代码>设置内容视图
+XMLaddView
独家发布?一年多之后,这个解决方案帮了我的忙:)非常感谢您发布这篇文章!现在三年多了^^仍然是非常有用的答案