2011-12-13 22 views
3

私はその中にフラグメントを持つアクティビティを持っています。フラグメントと方向の変更の処理

私は向きが自分自身を変える扱いたいので、私はこのように見えるようにマニフェストを更新:

<activity android:name="com.test.app" android:configChanges="orientation|keyboardHidden"/> 

それから私はこのように見える活動を更新:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     updateLayout(); 
    } 

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

    private void updateLayout() { 
     setContentView(R.layout.my_layout); 
    } 

これもフラグメントで行います。

fragment.setRetainInstance(true); 

私が持っている問題は、画面の向きを設定すると、フラグメントにIDが重複しているというsetContentView()で失敗するということです。それが起こらないように、アイデアを作る方法がわからない?

tia。

答えて

1

以前のレイアウトを捨てないように言われたからだと思うので、あなたはそれを回転させるとまだ古いビューを持っています(この場合、新しいビューと同じです) 。

また、私はわからないんだけど、私はこれを考える:

fragment.setRetainInstance(true); 

は不要ですか!ここにいるので、あなたが構成の変更のあなたの活動を再作成しないで、それを伝える:私の経験で

android:configChanges="orientation|keyboardHidden" 

を、XMLに設定configChangesは、レクリエーションを防止するのに十分です。

EDIT:

うーんちょうどあなたがフラグメントを使用しているかを正確に、もう一度見て?以下のようなものを見

class SomeActivity extends FragmentActivity 
{ 
    ... 
    @Override 
    public void onCreate(Bundle savedInstance) 
    { 
    ... 
     LayoutInflater inflater = getLayoutInflater(); 
     inflater.inflate(R.layout.some_fragment, root); 
    ... 
    } 
} 

そのXML付::ここに掲載のコードは、あなたのFragmentActivityからであれば、私はあなたのフラグメントを膨張させるとアクティビティに追加するために、このような何かを期待する some_fragment.xmlを

<?xml version="1.0" encoding="utf-8"?> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.someapp.fragments.SomeFragment"> 
</fragment> 

私はあなたがどのようにフラグメントを使用しているかについてはっきりしていないと思います。しかし、このようにXML設定を使用すると、私のローテーションでのレクリエーションを無効にすることができます。

+0

XMLにはフラグメントが含まれているので、1つを膨張させて追加する必要はありません...そうですか? – user645402

+0

私は100%確信しているわけではありませんが、私の方法は非常に柔軟性があり、完全に機能すると信じています。 – Adam

関連する問題