1

我试图解决一个涉及动画化嵌套片段的较大问题,所以我创建了一个单独的项目,并试图在模块中解决它。为什么在嵌套片段插入之前/之后可见性发生变化

,第一部分是childFragment内切换可见性 - 我一直在尝试不同类型的代码,我不知道为什么,当我加layoutReturn.setVisibility(View.INVISIBLE);

After adding the child fragment, the parent fragment remains

父片段是隐藏的。然而,当我插入子片段后添加此行时:

@Override 
public void onClick(View v) { 

    //layoutReturn.setVisibility(View.INVISIBLE); 

    FragmentManager childFrag = getFragmentManager(); 
    FragmentTransaction childFragTrans = childFrag.beginTransaction(); 
    addressCard_fragment addressCardChild = new addressCard_fragment(); 
    childFragTrans.add(R.id.bottom_row_fragment_container, addressCardChild); 
    //childFragTrans.setCustomAnimations(R.animator.slide_in_card, R.animator.slide_out_card); 
    childFragTrans.commit(); 
    Toast.makeText(getActivity().getBaseContext(), "yo", Toast.LENGTH_SHORT).show(); 
    layoutReturn.setVisibility(View.INVISIBLE); 


} 

更改没有效果。父级片段保持可见状态,Toast出现,但childFragment仍未见。任何帮助将不胜感激!

主要活动:

public class MainActivity extends AppCompatActivity { 

private topRow_fragment fragmentTopRow; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     fragmentTopRow = new topRow_fragment(); 
    } 

    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.top_row_fragment_container, fragmentTopRow); 
    fragmentTransaction.commit(); 
}} 

parentFragment类:

public class topRow_fragment extends Fragment implements View.OnClickListener{ 

ImageButton btn; 
View layoutReturn; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    layoutReturn = inflater.inflate(R.layout.firstrow_fragment, container, false); 

    btn = (ImageButton) layoutReturn.findViewById(R.id.imageLeft); 
    btn.setOnClickListener(this); 

    return layoutReturn; 
} 

@Override 
public void onClick(View v) { 

    //layoutReturn.setVisibility(View.INVISIBLE); 

    FragmentManager childFrag = getFragmentManager(); 
    FragmentTransaction childFragTrans = childFrag.beginTransaction(); 
    addressCard_fragment addressCardChild = new addressCard_fragment(); 
    childFragTrans.add(R.id.bottom_row_fragment_container, addressCardChild); 
    //childFragTrans.setCustomAnimations(R.animator.slide_in_card, R.animator.slide_out_card); 
    childFragTrans.commit(); 
    Toast.makeText(getActivity().getBaseContext(), "yo", Toast.LENGTH_SHORT).show(); 
    layoutReturn.setVisibility(View.INVISIBLE); 


}} 

childFragment类只是典型onCreateView方法。

Update01:当我使用getChildFragmentManager我收到一个以09-14 22:54:34.933 20795-20795/com.example.bryanjordan.nestedfragmentstest E/FragmentManager: No view found for id 0x7f0c0060 (com.example.bryanjordan.nestedfragmentstest:id/bottom_row_fragment_container) for fragment addressCard_fragment{7d09836 #0 id=0x7f0c0060}

开始的,并且总结了巨大的错误:java.lang.IllegalArgumentException: No view found for id 0x7f0c0060 (com.example.bryanjordan.nestedfragmentstest:id/bottom_row_fragment_container) for fragment addressCard_fragment{7d09836 #0 id=0x7f0c0060}

XML文件:

主要活动:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
tools:context="com.example.bryanjordan.nestedfragmentstest.MainActivity"> 

<android.support.constraint.ConstraintLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="368dp" 
     android:layout_height="wrap_content" 
     tools:layout_editor_absoluteY="8dp" 
     android:id="@+id/constraintLayout" 
     android:layout_marginLeft="8dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginRight="8dp" 
     app:layout_constraintRight_toRightOf="parent"> 

     <RelativeLayout 
      android:id="@+id/top_row_fragment_container" 
      android:layout_width="367dp" 
      android:layout_height="wrap_content" 
      android:layout_marginStart="8dp" 
      android:layout_marginEnd="8dp" 
      tools:layout_editor_absoluteY="8dp" 
      tools:layout_editor_absoluteX="1dp"> 
     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/bottom_row_fragment_container" 
      android:layout_width="367dp" 
      android:layout_height="wrap_content" 
      android:layout_marginStart="8dp" 
      android:layout_marginEnd="8dp" 
      tools:layout_editor_absoluteY="8dp" 
      tools:layout_editor_absoluteX="1dp"> 
     </RelativeLayout> 



    </android.support.constraint.ConstraintLayout> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="8dp" 
     app:layout_constraintTop_toBottomOf="@+id/constraintLayout" 
     android:layout_marginLeft="8dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginRight="8dp" 
     app:layout_constraintRight_toRightOf="parent"> 

     <RelativeLayout 
      android:id="@+id/second_Row_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginEnd="8dp" 
      android:layout_marginLeft="6dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginStart="8dp" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      tools:layout_editor_absoluteY="25dp"> 

     </RelativeLayout> 
    </android.support.constraint.ConstraintLayout> 

</android.support.constraint.ConstraintLayout> 

firstrow_fragment

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/parent_row_container" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
tools:context="com.example.bryanjordan.nestedfragmentstest.MainActivity"> 

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.CardView 
     android:id="@+id/cardTop" 
     android:layout_width="340dp" 
     android:layout_height="80dp" 
     android:layout_margin="5dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginTop="3dp" 
     android:elevation="5dp" 
     app:cardCornerRadius="5dp" 
     app:contentPadding="5dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_goneMarginLeft="5dp" 
     app:layout_goneMarginRight="5dp" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp"> 

     <android.support.constraint.ConstraintLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp"> 

      <ImageButton 
       android:id="@+id/imageLeft" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginStart="8dp" 
       android:layout_marginTop="8dp" 
       android:adjustViewBounds="true" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintBottom_toBottomOf="parent" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintTop_toTopOf="parent" /> 

      <ImageView 
       android:id="@+id/imageCentre" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="13dp" 
       android:layout_marginStart="13dp" 
       android:layout_marginTop="8dp" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintBottom_toBottomOf="parent" 
       app:layout_constraintLeft_toRightOf="@+id/imageLeft" 
       app:layout_constraintTop_toTopOf="parent" /> 

      <ImageView 
       android:id="@+id/imageRight" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="13dp" 
       android:layout_marginStart="13dp" 
       android:layout_marginTop="8dp" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintBottom_toBottomOf="parent" 
       app:layout_constraintLeft_toRightOf="@+id/imageCentre" 
       app:layout_constraintTop_toTopOf="parent" /> 
     </android.support.constraint.ConstraintLayout> 


    </android.support.v7.widget.CardView> 


</android.support.constraint.ConstraintLayout> 

addressCard

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/address_card_container" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
tools:context="com.example.bryanjordan.nestedfragmentstest.MainActivity"> 

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.CardView 
     android:id="@+id/years_of_cooking_xp_cardView" 
     android:layout_width="337dp" 
     android:layout_height="240dp" 
     android:layout_margin="5dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:elevation="50dp" 
     app:cardCornerRadius="5dp" 
     app:contentPadding="5dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_goneMarginLeft="5dp" 
     app:layout_goneMarginRight="5dp" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" 
     tools:layout_editor_absoluteY="20dp"> 
     <android.support.constraint.ConstraintLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp"> 

      <TextView 
       android:id="@+id/textView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="8dp" 
       android:text="Test" 
       android:textAlignment="center" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toTopOf="parent" /> 

      <ImageButton 
       android:id="@+id/experience_left_button" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginRight="40dp" 
       android:layout_marginTop="8dp" 
       android:adjustViewBounds="true" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintRight_toLeftOf="@+id/experience_centre_button" 
       app:layout_constraintTop_toBottomOf="@+id/textView" /> 

      <ImageButton 
       android:id="@+id/experience_centre_button" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="8dp" 
       android:adjustViewBounds="true" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintLeft_toLeftOf="parent" 
       app:layout_constraintRight_toRightOf="parent" 
       app:layout_constraintTop_toBottomOf="@+id/textView" 
       app:layout_constraintHorizontal_bias="0.498" /> 

      <ImageButton 
       android:id="@+id/experience_right_button" 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginLeft="40dp" 
       android:layout_marginTop="8dp" 
       android:adjustViewBounds="true" 
       android:background="@drawable/square" 
       android:clickable="true" 
       android:scaleType="centerCrop" 
       app:layout_constraintLeft_toRightOf="@+id/experience_centre_button" 
       app:layout_constraintTop_toBottomOf="@+id/textView" /> 

      <TextView 
       android:id="@+id/zero_to_one_Year" 
       android:layout_width="40dp" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="8dp" 
       android:text="0 - 1 Year" 
       android:textAlignment="center" 
       app:layout_constraintBottom_toBottomOf="@+id/experience_left_button" 
       app:layout_constraintLeft_toLeftOf="@+id/experience_left_button" 
       app:layout_constraintRight_toRightOf="@+id/experience_left_button" 
       app:layout_constraintTop_toTopOf="@+id/experience_left_button" /> 

      <TextView 
       android:id="@+id/one_to_three_years" 
       android:layout_width="40dp" 
       android:layout_height="wrap_content" 
       android:text="1 - 3 Years" 
       android:textAlignment="center" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="8dp" 
       app:layout_constraintBottom_toBottomOf="@+id/experience_centre_button" 
       app:layout_constraintLeft_toLeftOf="@+id/experience_centre_button" 
       app:layout_constraintRight_toRightOf="@+id/experience_centre_button" 
       app:layout_constraintTop_toTopOf="@+id/experience_centre_button" 
       /> 

      <TextView 
       android:id="@+id/three_plus_years" 
       android:layout_width="40dp" 
       android:layout_height="wrap_content" 
       android:text="3+ Years" 
       android:textAlignment="center" 
       android:layout_marginBottom="8dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="8dp" 
       app:layout_constraintBottom_toBottomOf="@+id/experience_right_button" 
       app:layout_constraintLeft_toLeftOf="@+id/experience_right_button" 
       app:layout_constraintRight_toRightOf="@+id/experience_right_button" 
       app:layout_constraintTop_toTopOf="@+id/experience_right_button" 
       /> 

     </android.support.constraint.ConstraintLayout> 


    </android.support.v7.widget.CardView> 

</android.support.constraint.ConstraintLayout> 

回答

2

无论您top_row_fragment_containerbottom_row_fragment_container容器是在MainActivity。那么它不是可能的嵌套片段。

嵌套片段意思是片段里面片段

您将wrap_content作为容器高度。

android:layout_height="wrap_content" 

设置一些高度以使您的两个片段都可见。

从您的代码中删除layoutReturn.setVisibility(View.INVISIBLE);

+0

我使用getChildFragmentManager()最初但一直面临着一个非常大的错误 - 我会在发布信息的错误报告。 – Hews

+0

您可以发布您的** topRow_fragment ** XML –

+0

添加所有XML文件,感谢您的帮助! – Hews

1

解决方案

首先,感谢Bhuvanesh烧烤和JRamesh他们的帮助。

对于那些面临着类似的问题,我会很快建议考虑以下几点:

  1. 确保你在另一个片段中初始化你的孩子片段。虽然Bhuvanesh建议不要将FrameLayout移动到父片段中,但我发现这很有效。不幸的是,子片段现在正在父片段的CardView中初始化。
  2. 绷能见度通过引用那是FrameLayout添加到父片段在点说明1.
  3. 对于切换的layoutReturn我想这是因为我回国layoutReturn知名度子片段的容器解决而不更新任何更改。这解释了为什么没有任何补充,活动将变成空白。但是,一旦添加新片段,布局会发生变化,因此更改布局的可见性将成为过时的调用。应该指出,我对这个答案没有信心,所以请带上一点盐。

干杯

相关问题