簡體   English   中英

在活動OnCreate中加載片段

[英]Load Fragment in Activity OnCreate

問題 :從片段1切換到片段2,切換發生,但兩者都可見。 (片段2成為焦點)

片段1是MenuFragment Fragment 2是GameFragment

我相信這是發生的,因為我的片段1包含在我的主activity.xml中

   <fragment
        android:id="@+id/menu_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout="@layout/fragment_menu">
    </fragment>

main.xml中的代碼將片段加載到主活動中。 每當我使用以下代碼用游戲片段替換菜單片段時:

public void replaceFragment(Fragment fragment) 
{
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.gameview_layout, gameFragment);
    fragmentTransaction.addToBackStack(fragment.toString());
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fragmentTransaction.commit();
}

游戲片段出現並疊加在菜單片段上方。 如何讓菜單片段消失? 我確信一個簡單的修復方法是makeVisible(false)或類似的東西,但我相信真正的問題是在xml文件中編程以包含MenuFragment。

問題 :如何在main.java類中編程以在create上加載片段?

我想這樣做,所以我可以編程它來加載片段1(MenuFragment),而不是它已經在那里。 兩者都可見的唯一原因是因為片段1包含在我的main.xml中

您應該創建單個FrameLayout(或任何其他),而不是創建兩個片段,並在切換期間替換幀布局,如下例所示。

XML

<FrameLayout
    android:id="@+id/frameContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

科特林

fun replaceFragment(fragment:Fragment){
    supportFragmentManager
            .beginTransaction()
            .replace(R.id.frameContainer, fragment)
            .commit()
}

Java的

public void replaceFragment(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.frameContainer, fragment);
    fragmentTransaction.addToBackStack(fragment.toString());
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fragmentTransaction.commit();
}

嘗試使用像LinearLayout或FrameLayout這樣的布局作為片段的容器,並在onCreate中制作類似的東西

getFragmentManager().beginTransaction()
    .add(R.id.menu_fragment, MenuFragment.getInstance())
    .commit();

並將容器ID重命名為“@ + id / fragmentContainer”或類似的東西。

在片段布局中,xml添加背景顏色來解決問題

您應該創建單個FrameLayout(或任何其他),而不是創建兩個片段,並在切換期間替換幀布局,如下例所示。

JAVA

public void loadFragment(Fragment fragment) {
    String backStateName = fragment.getClass().getName();
    FragmentManager fragmentManager = getSupportFragmentManager();
    boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);
    if (!fragmentPopped) {
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frameContainer, fragment);
        fragmentTransaction.addToBackStack(backStateName);
        fragmentTransaction.commit();
    }
}

XML

 <FrameLayout android:id="@+id/frameContainer" android:layout_width="match_parent" android:layout_height="match_parent"/> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM