2013-07-08 5 views
0

У меня есть деятельность, и я хочу, чтобы добавить динамически мои фрагменты в зависимости от ориентации, так что я сделал следующим образом: Calendrier.javaAndroid - добавить динамически фрагменты деятельности

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> 

и мой расположение портов/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> 

моя проблема:

  • Когда я начала моего приложения в портретном режиме, аи получить черный экран и когда я повернуть его, я получаю мои две другие фрагменты, которые хорошо, но когда я повернуть его снова (к портрету) я до сих пор мои фрагменты вместо моего черного экрана, как правило, он должен отображать черный экран, потому что оба OnCreate и OnDestroy являются excuted

ответ

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(); 
} 
+0

спасибо, это действительно полезно! – Blacksword888

+0

Я рад, что это помогло :). Кстати, вы должны принять ответ, если это было полезно или проголосовать. – koso

0

Android сохраняет фрагменты, добавленные к вашей деятельности при повороте. Необходимо добавить флаг, если вы уже добавили фрагменты и удалили их при создании активности.

+0

Не можете найти более подробную информацию? – Blacksword888

Смежные вопросы