2017-08-30 76 views
0

我正在嘗試嵌套片段,因爲我的xml佈局開始難以維護。嵌套片段 - 從片段開始的片段不會膨脹佈局xml

從片段我點擊跳過按鈕時開始一個片段。我嘗試了一個正常的開始和一個孩子的片段。在這兩種情況下,我進入膨脹方法的片段,但我的屏幕保持空白。當然,當我將片段稱爲第一層時,佈局正確膨脹。

呼叫轉移到第二個片段一日一中:

skip.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      SelectServiceFragment ssf = new SelectServiceFragment(); 
      ft.add(ssf,"SelectService"); 
      ft.commit(); 
     } 
    }); 

SelectServiceFragment:

public class SelectServiceFragment extends Fragment { 
    Context context; 


    public SelectServiceFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootview = null; 
     rootview = inflater.inflate(R.layout.select_svce_fragment, container, false); 
     return rootview; 
    } 

和我的XML佈局:

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="Select service!!!!" 
     android:textColor="#000000" 
     /> 
</RelativeLayout> 

我錯過了在嵌套片段的東西嗎?

+0

你使用過chindfragment manager嗎? –

+0

我嘗試了兩種方法。 FragmentTransaction ft = getChildFragmentManager()。beginTransaction(); ft.replace(R.id.selsvcefrag,ssf);我試過非孩子的方法,因爲我想消除framelayout(R.id.selsvcefrag)。這兩種方式導致膨脹顯示一個空的屏幕。 – narb

回答

0

試試這個:

skip.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     Fragment ssf = new SelectServiceFragment(); 
     ft.replace(R.id.container, ssf); 
     ft.commit(); 
    } 
}); 
+1

爲什麼你不解釋爲什麼解決了這個問題,而不是僅僅發佈原始代碼? –

+0

Mike的好評;)我試過了。同樣的行爲。我看到了對inflater.inflate的調用,但屏幕是空的。 – narb

0
FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      SelectServiceFragment ssf= new SelectServiceFragment(); 
      fragmentTransaction.add(R.id.fragment_container, ssf, "SelectService"); 
      fragmentTransaction.commit(); 

嘗試這種方式

-1

是的,你缺少的最重要的事情。您可以從基類方法更改片段。您首先替換方法的類。將該方法作爲公共方法並使用片段類名稱傳遞參數。比方說您在基類的方法,你先更換或發起片段

public void replaceFragment(Fragment fragment) { 

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.content_home, fragment); 
    fragmentTransaction.commit(); 
    // if you have used drawer_layout 
    // othere wise no need of below lines 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
} 

然後調用任何片段此方法並傳入片段類名像這樣((BaseClassName) getActivity()).replaceFragment(new ReportLostItem());這樣你就可以從任何更換片段片段類。接受答案,如果它解決您的問題

+0

我不明白你的觀點:你稱基類是什麼?它不能解釋爲什麼xml的膨脹是空的?如果我能正確理解你,我可以在我的main_activity中放置一個公共方法replaceFragment?當我按照原樣嘗試代碼時,我在FragmentManager和android.app.Fragment所需的support.v4之間存在衝突。我試圖將所有內容切換到support.v4,但我遇到了更多問題。 – narb

+0

可以請你分享你的完整代碼。我認爲你是新來的碎片。請分享你的主類和一個片段類代碼 –

+0

你非常接近解決你的問題。基類意味着你的MainActivity。並導入android.support.v4.app.Fragment;在你的片段類。並刪除導入android.app.fragemnt。這樣你就可以替換任何碎片 –

-1

我的藉口傢伙讓你失去你的時間在這個! 所有工作正常! 我在從RelativeLayout跳轉時做的唯一事情是在framelayout所在的RL上的setvisibility(不可見)。 對不起!