【问题标题】:Android: How can I navigate from one "detail" to another "detail", while having the "Up" button go back to the "Master" list?Android:如何从一个“详细信息”导航到另一个“详细信息”,同时让“向上”按钮返回“主”列表?
【发布时间】:2015-09-10 05:33:51
【问题描述】:

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

我花了很多时间思考这个问题并研究了各种方法,甚至问了一个堆栈溢出问题 (How to do something like Drop Down Navigation in Android (since it looks like it has become deprecated?)),我仍在等待一个有用的答案。即使我回答了这个问题,我也不确定它是否真的适用于这样的 Master Detail 流程。

如果 Master-Detail 不起作用,我想到的完成这个 UI 布局的最佳方法是什么?以前有人做过类似的事情吗?谢谢!


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


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


编辑 3:我试图想出一个应用程序来做我想做的事情,我认为“Kindle”做得很好。它必须在一本书的每一页之间切换,但首先你必须选择一本书。当您在阅读 Kindle 书籍时,操作栏和导航抽屉变为白色,导航抽屉的第一项是“图书馆”。单击“库”将带您进入一个完全不同的活动,该活动带有黑色操作栏和带有不同菜单项的黑色导航抽屉。所以,我认为这可能是我应该采取的路线。我可能不再有“向上”按钮,而只需使用抽屉的第一项作为“向上”按钮。不过,我仍然有兴趣学习和考虑我的所有选择。

【问题讨论】:

  • 你熟悉应用Hello SMS吗?我认为 UI 非常适合您在这里想要实现的目标。看看那个。

标签: android user-interface master-detail


【解决方案1】:

我会这样解决:

  • Master(MainActivity 中的片段)
  • 详细信息 1(FirstDetailActivity 中的片段)
  • 细节 2(SecondDetailActivity 中的片段)

清单文件(例如):

<application>

    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="...MainActivity" ...>
        ...
    </activity>


   <!-- First detail activity -->
   <activity
       android:name="...FirstDetailActivity"
       android:parentActivityName="...MainActivity" >
       <!-- Parent activity meta-data to support 4.0 and lower -->
       <meta-data
           android:name="android.support.PARENT_ACTIVITY"
           android:value="...MainActivity" />
   </activity>

   <!-- Second detail activity -->
   <activity
        android:name="...SecondDetailActivity"
        android:parentActivityName="...MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
           android:name="android.support.PARENT_ACTIVITY"
           android:value="...MainActivity" />
   </activity>

</application>

所以基本上:

  1. 点击列表(Master)打开FirstDetailActivity
  2. 点击 FirstDetailActivity(Tab、Spinner、Button 等)打开 SecondDetailActivity
  3. FirstDetailActivity 或 SecondDetailActivity 中的向上按钮提供到 MainActivity 的导航

参考:http://developer.android.com/training/implementing-navigation/ancestral.html

【讨论】:

    【解决方案2】:

    这是使用 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>
    

    正如我所说,这个想法是在bt_continue 被点击时切换layout_page_1layout_page_2 的可见性:

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

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

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

    【讨论】:

      【解决方案3】:

      将您的详细信息页面实现为片段并使用 ViewPager 来保存它们。这样,用户可以通过向左或向右滑动来在两者之间切换。例如,如果您查看 Gmail 应用程序,您还可以在打开邮件列表中的邮件后在其中滑动查看您的邮件详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多