Android:我如何从一个"细节"导航到另一个"细节",同时使用"向上"按钮返回"主"列表?

Roc*_*Lee 5 user-interface android master-detail

我的应用程序中有一个主 - 细节模式,但我希望细节能够切换视图.我想尽可能多地节省空间,这样"内容"既美观又宽敞.如何从一个"细节"导航到另一个"细节",同时使用"向上"按钮返回"主"列表?(请参阅我的照片上"细节1"和"细节2"之间的箭头.)

在此输入图像描述

我花了很多时间思考这个并研究各种方法,甚至还问了一个堆栈溢出问题(如何在Android中执行类似下拉导航的事情(因为它看起来已被弃用?))和我还在等待一个有用的答案.即使我回答了这个问题,我也不确定它是否真的能与这样的Master Detail流程一起使用.

如果Master-Detail不起作用,那么实现这种UI布局的最佳方法是什么?以前有人做过这样的事吗?谢谢!


编辑:理想情况下,我还希望用户能够设置"默认"视图(详细信息1或详细信息2),这将是单击主列表上的项目后出现的第一个屏幕.


编辑2:我有一个想法,使用ViewPager在细节1和细节2之间转换.我不确定它是否会起作用.或者,我可以将详细信息2作为详细信息1的附加活动,但我不想为"内容"区域中的按钮腾出空间.我不能真正使用抽屉,因为抽屉图标与"向上"箭头位于同一位置.我不知所措,因为我认为抽屉最适合这种情况,但我不能使用它,因为我已经使用了"向上"箭头.


编辑3:我试着想到一个应用程序做了我正在尝试做的事情,我认为"Kindle"做得很好.它必须在书的每一页之间切换,但首先你必须选择一本书.当你在一本关于Kindle的书中时,Action Bar&Navigation Drawer变为白色,而Navigation Drawer的第一个项目是"Library".单击"库"可以使用黑色操作栏和带有不同菜单项的黑色导航抽屉,进行完全不同的活动.所以,我认为这可能是我应该采取的路线.我可能不再有"向上"按钮,只需使用抽屉的第一项作为"向上"按钮.不过,我仍然有兴趣学习和考虑我的所有选择.

MrH*_*rio 1

这是使用Fragments 和 的替代方法ViewPager(因为它们通常可以以更多样板代码结尾)。

将所有详细信息视图集中在一起,然后单击按钮即可layout.xml切换其可见性。View.setVisibility()您可以将此按钮标记为“继续”、“下一步”或其他任何名称。主要思想是让用户意识到,尽管屏幕发生变化,他们仍处于相同的上下文中。

以下是有关如何安排详细信息的说明layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/layout_page_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible">

        <!-- Put your detail 1 content here -->

    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_page_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">

        <!-- Put your detail 2 content here -->

    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Continue"
        android:id="@+id/bt_continue"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

正如我所说,这个想法是在点击时切换layout_page_1和的可见性:layout_page_2bt_continue

@Override
public void onClick(View v) {
    if(v.getId() == R.id.bt_continue) {
        layoutPage1.setVisibility(View.INVISIBLE);
        layoutPage2.setVisibility(View.GONE);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过此逻辑,您还可以实现“上一页”按钮以导航回详细信息的第一页。

如果您希望用户能够设置默认视图,那么这也很容易。int只需在您的中保存一个SharedPreferences,它将代表将“打开”的页面 - 即View.VISIBLE用户第一次打开详细视图时将设置的视图。