0

アクティビティがあり、向きに応じてフラグメントを動的に追加したいので、次のようにしました: Calendrier.java

package com.thinline.dm21.calendrier;

public class Calendrier extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calendrier_main);
    //ajouter les fragments Planifications et Calendrier mensuel 
    ajouterFragments();       
}

public void ajouterFragments(){
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    if(getResources().getConfiguration().orientation == 1){

    }
    else if(getResources().getConfiguration().orientation == 2){
        ft.add(R.id.calendrier_planifictions, new Planifications());
        ft.add(R.id.calendrier_calendrierhebdomadaire, new CalendrierHebdomadaire());
    }

    ft.commit();
}
}

これは私のレイアウト/calendrier_main.xmlです

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/calendrier_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<LinearLayout
    android:id="@+id/calendrier_planifictions"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

</LinearLayout>

<RelativeLayout
    android:id="@+id/calendrier_calendrierhebdomadaire"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2" >
</RelativeLayout>

</LinearLayout>

そして私のlayout-port/calendrier.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/calendrier_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<LinearLayout
    android:id="@+id/calendrier_planifictions"
    android:layout_height="0dp"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

</LinearLayout>

<RelativeLayout
    android:id="@+id/calendrier_calendrierhebdomadaire"
    android:layout_height="0dp"
    android:layout_width="match_parent"
    android:layout_weight="2" >
</RelativeLayout>

</LinearLayout>

私の問題は:

  • アプリケーションを縦向きモードで起動すると黒い画面が表示され、それを回転すると他の 2 つのフラグメントが表示されますが、(縦向きに) 再度回転すると、黒い画面ではなくフラグメントが残ります。 、onCreateとonDestroyの両方が実行されるため、通常は黒い画面が表示されるはずです
4

2 に答える 2

0

Android は回転の変更後もフラグメントを保持するため、ポートレート モードではフラグメントが追加されているかどうかを確認し、追加されている場合は削除する必要があります。コードは次の例のようになります。

private static final String PLANIFICATIONS_FRAG_TAG = "PLANIFICATIONS_FRAG_TAG";
private static final String CALENDAR_FRAG_TAG = "CALENDAR_FRAG_TAG"; 

public void ajouterFragments(){
    Configuration configuration = getResources().getConfiguration();
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();

    Planifications planificationsFrag = fragmentManager.findFragmentByTag(PLANIFICATIONS_FRAG_TAG);
    CalendrierHebdomadaire calendarFrag = fragmentManager.findFragmentByTag(CALENDAR_FRAG_TAG);

    if (configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
        if (planificationsFrag != null) 
            ft.remove(fragment);
        if (calendarFrag != null) 
            ft.remove(calendarFrag);
     }
     else if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
         if (planificationsFrag == null) 
            ft.add(R.id.calendrier_planifictions, new Planifications(), PLANIFICATIONS_FRAG_TAG);
         if (calendarFrag == null) 
             ft.add(R.id.calendrier_calendrierhebdomadaire, new CalendrierHebdomadaire(), CALENDAR_FRAG_TAG);
     }

    ft.commit();
}
于 2013-07-08T19:54:48.897 に答える
0

Android は、回転時にアクティビティに追加されたフラグメントを保持します。フラグメントを既に追加している場合はフラグを立て、アクティビティの作成時にそれらを削除する必要があります。

于 2013-07-08T15:33:41.403 に答える