我是第一次使用 Fragment,我正在尝试从 Activity 导航到 Fragment。导航应该由将我带到上述 fragment 的 OnClickListener (ImageView) 处理。但是,我的 fragment 并没有占据整个屏幕。我已经在传入 View 以及应该包含 Fragment 的框架上设置了 match-parent。所以总的来说,我不确定我是否有 XML 误解或 Java。我将在下面提供尽可能多的信息;
public class recipe_detail extends AppCompatActivity {
TextView mIngredientsTV;
RecyclerView ingredientsRecyclerView;
RecyclerView stepsRecyclerView;
ImageView mBakingGif;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipe_detail);
mBakingGif.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.frag_container, new VideoFragment());
ft.commit();
}
});
}
public class VideoFragment extends Fragment {
ImageView mThumbnailImage;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.video_fragment, container, true);
}
// This event is triggered soon after onCreateView().
// Any view setup should occur here. E.g., view lookups and attaching view listeners.
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
mThumbnailImage = view.findViewById(R.id.exo_player_view);
Drawable myDrawable = getResources().getDrawable(R.drawable.ic_launcher_background);
mThumbnailImage.setImageDrawable(myDrawable);
}
}
<!--Activity to be Replaced-->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ingredients_header"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/ingredients_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Ingredients_header"
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold"
tools:text="INGREDIENTS" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:background="#E0F2F1"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/ingredients_recycler_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/steps_label"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/video_thumbnail"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginTop="20dp"
android:background="@color/colorPrimaryDark" />
</LinearLayout>
<!-- Frame to hold fragment-->
<FrameLayout
android:id="@+id/frag_container"
android:background="@android:color/darker_gray"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</ScrollView>
<!--Fragment to be infalted-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/exo_content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/exo_player_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/description_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/exo_player_view" />
<TextView
android:id="@+id/short_description_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/description_tv" />
<Button
android:id="@+id/previous_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Prev" />
<Button
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="Next" />
</RelativeLayout>
最佳答案
您正在膨胀的 fragment 将始终占用与容纳它的容器一样多的空间。在您的例子中,容器 (FrameLayout) 的高度为 WRAP_CONTENT。因此,该 fragment 将只占用显示其内容所需的空间量。您可以做的是将 FrameLayout 的高度设置为 MATCH_PARENT。这样 fragment 将占据整个屏幕空间。
请注意,在另一个 View 之上添加 fragment 时,请始终记住为您的 fragment 布局提供一些背景颜色(默认情况下为透明)。否则,您之前的 View 也将通过 fragment 保持可见。
编辑(解释评论)
您需要像这样将 FrameLayout 移出 ScrollView
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ingredients_header"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/ingredients_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Ingredients_header"
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold"
tools:text="INGREDIENTS" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:background="#E0F2F1"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/ingredients_recycler_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/steps_label"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/video_thumbnail"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginTop="20dp"
android:background="@color/colorPrimaryDark" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
<!-- Frame to hold fragment-->
<FrameLayout
android:id="@+id/frag_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
我所做的是将 fragment 容器移出 ScrollView。但是,由于一个 Activity/fragment 只能有 1 个根元素,我添加了一个 FrameLayout 作为 ScrollView 和 FrameLayout 的父元素。
关于android - Activity fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916132/