【问题标题】:Navigating between ListFragment and Fragment在 ListFragment 和 Fragment 之间导航
【发布时间】:2015-11-15 22:36:29
【问题描述】:

我的学校作业有一个包含 ListFragment 和 Fragment 的活动。 MainActivity 创建 ListFragment,然后列表上的每个项目都应该打开只包含图片的常规 Fragment,然后当我点击图片时它应该返回 ListFragment。

在所有情况下,我都使用以下代码调用片段(当然针对特定情况进行了编辑):

    Fragment fragTwo = new FragmentTwo();

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.fragment_place, fragTwo);
    ft.addToBackStack(null);
    ft.commit();

它调用片段 OK,除了第二个片段将出现在 ListFragment 上方,当第二个片段打开时,我仍然可以从列表中选择内容。每次导航时都需要创建一个新的片段对象吗?以及如何从它自己的 onclick 侦听器中禁用/启用片段?

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<fragment
    android:name="com.example.w0068332.fragmentstest.FragmentOne"
    android:id="@+id/fragment_place"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

【问题讨论】:

  • Activity如何插入ListFragment?它是在活动的布局 xml 中,还是您使用 FragmentTransaction 以编程方式添加它?发布您的活动和 xml 布局代码可能会有所帮助。
  • @Benstrom 我已经添加了 main_activity.xml,你可以看到有一个片段被放入其中。在 mainActivity 的 onCreate 中,我(基本上)使用第一段代码将片段 (fragOne) 放置到位。

标签: java android listview android-fragments fragment


【解决方案1】:

1- 是的,您需要为每个项目创建一个片段。

                    Bundle arguments = new Bundle();
                    arguments.putInt(FragmentTwo.ARG_ITEM_ID,R.drawable_pic);
                    FragmentTwo fragment = new FragmentTwo();
                    fragment.setArguments(arguments);
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.item_detail_container, fragment)
                            .commit();

我想你显示的图片来自资源

2- 在显示第二个时禁用 ListFragment 的选择。 在第二个片段的父布局中,您必须添加背景并使其可点击,如下所示:

android:background="@color/white"
android:clickable="true"

3- 要返回 ListFragment,为 ImageView 添加一个单击侦听器,并为 Activity 的 onClick 调用 onBackPressed:

getActivity().onBackPressed();

您还可以查看来自 Android Studio 的模板,用于 Master 和 details 活动

【讨论】:

  • 谢谢!我真正需要的部分是 getActivity().onBackPressed();。我认为这是因为我将第一个片段的第二个实例放在顶部并不断构建新片段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多