10

EditText と Button を持つレイアウトがあります。私は<include>それを私のメインレイアウトに入れました。

レイアウトと回転に奇妙な問題があります。デバイス(物理)を回転させると、それ自体が複製されたように見え、テキストとレイアウトが台無しになります。

これは、文字化けを追加した後の最初のオープンです。

1

DSC_0013 は、フラグメントの起動時に EditText にあります。

次に、電話を回転させて、別の文字化けを追加します。

2

そして、あなたは問題をかなりはっきりと見ることができます。最初は、EditText が台無しになっているだけだと思っていました。しかし、新しい行を作成するのに十分なテキストを追加すると:

3

ボタンもぐちゃぐちゃになっているのがわかります。

私は override を行いますがonSaveInstanceState、その中では EditText やその値には触れません。厳密には別の目的で使用されます。

何が起きていて、どうすれば修正できますか?

4

3 に答える 3

16

修正しました!

それは、それ自体を複製するビューでも、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);
    }
于 2012-09-10T00:28:06.980 に答える
1

また、フラグメントに setRetainedInstance(true) を設定し、FragmentManager.findFragmentById(int) または FragmentManager.findFragmentByTag(String) で Fragment フォームを取得しようとすることもできます。null が返された場合は、Fragment の新しいインスタンスを作成する必要がありました。 .

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();
}
于 2016-05-25T14:30:58.517 に答える