Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 版面在屏幕旋转时自动复制_Android_Android Layout_Android Edittext - Fatal编程技术网

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);
    }

如何设置视图<代码>设置内容视图
+XML
addView
独家发布?一年多之后,这个解决方案帮了我的忙:)非常感谢您发布这篇文章!现在三年多了^^仍然是非常有用的答案