2016-09-30 3 views
0

У меня есть основной макет этой формыПочему мои фрагменты появляются друг на друга?

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

    <LinearLayout 
     android:id="@+id/fragment1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/fragment2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 

И я делаю FragmentTransaction призывающего .replace() на них обоих, чтобы вызвать два фрагмента, которые используют следующий XML:

Fragment1.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:baselineAligned="true"> 

    ... 

</LinearLayout> 

Fragment2.xml

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v7.widget.RecyclerView> 

</LinearLayout> 

Почему два фрагмента появляются друг на друга? Я хочу, чтобы Fragment1 отображался непосредственно над Fragment2, у которого есть RecyclerView.

Edit: Код Замена:

fragment1 = Fragment1.newInstance(); 
fragment2 = Fragment2.newInstance(); 

FragmentManager fragmentManager = getChildFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment1, fragment1, "fragment1"); 
fragmentTransaction.replace(R.id.fragment2, fragment2, "fragment2"); 

fragmentTransaction.commit(); 
+0

Или я делаю это неправильно, и я должен использовать что-то другое, кроме замены? – KaliMa

+0

Покажите свой код о том, как добавить фрагмент и включить также скриншоты, чтобы сделать его более понятным. – Enzokie

+0

@Enzokie Добавлен код – KaliMa

ответ

1

Это потому, что вы положили две раскладки внутри CoordinatorLayout. CoordinatorLayout ведет себя как RelativeLayout. Попробуйте это вместо этого.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <FrameLayout 
     android:id="@+id/fragment1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
     <FrameLayout 
     android:id="@+id/fragment2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
</android.support.design.widget.CoordinatorLayout> 
+0

Если это похоже на RelativeLayout, похоже, это не позволяло мне делать всю вещь «layout_above» или «ниже», это правильно? – KaliMa

+0

Ваше исправление работало, но вы можете объяснить, как это работает? – KaliMa

+0

Я имею в виду, что он ведет себя как «RelativeLayout», но не присущий ему. Он используется для разных целей. – Joshua

0

Вы можете импортировать фрагменты непосредственно в макете активность в:

<fragment 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    class="com.packacge.Fragment1"/> 

<fragment 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    class="com.packacge.Fragment2"/> 
+0

Да, но позже я могу поменять местами другие фрагменты в этих областях; прямо сейчас, я просто пытаюсь заставить этот двух-случай работать – KaliMa

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