Android - 动态添加片段到活动

时间:2013-07-08 15:07:09

标签: android

我有一个活动,我想根据方向动态添加我的片段,所以我做了如下: 的 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();
}
}

这是我的 layout / 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>

我的问题是:

  • 当我以纵向模式启动我的应用程序时,ai得到一个黑色屏幕,当我旋转它时,我得到了我的另外两个碎片,这是好的,但当我再次旋转它(到肖像)我仍然有我的碎片而不是我的黑屏,通常它应该显示黑屏,因为onCreate和onDestroy都被执行

2 个答案:

答案 0 :(得分:0)

Android会在您旋转时将片段添加到您的活动中。如果已添加片段并在活动创建中删除它们,则需要标记。

答案 1 :(得分: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();
}
相关问题