在Android中选择导航抽屉有什么含义?

时间:2015-02-23 15:04:43

标签: android android-fragments navigation-drawer

据我所知,使用Navigation Drawer (android.support.v4.widget.DrawerLayout)时,您必须使用碎片。

所以所有活动都必须转化为片段。

此外,所有逻辑现在都将驻留在Navigation Drawer的活动中,因此活动文件的大小可能非常大而且不便于维护。

是否还有其他影响,是否有更容易解决这些问题的方法?

4 个答案:

答案 0 :(得分:0)

我前一段时间制作了一个应用程序并且我没有将所有活动转换为片段,而只是一种主菜单,然后当你参与一些"不同的"在你回来之前你没有抽屉的活动,它甚至可能很烦人。

至于逻辑我把一些片段(与每个片段相关)放在维护中。

答案 1 :(得分:0)

单一活动的原因很简单。这是因为你希望它保持持久性。

如果你有多个活动,他们都需要实现相同的抽屉布局,这会导致你多次充气和填充抽屉。

活动只是充当片段和抽屉布局的容器。它就像是两者之间的桥梁。

答案 2 :(得分:0)

我相信你的观念错了。让我解释一下原因。

  

据我所知,使用导航抽屉时   (android.support.v4.widget.DrawerLayout),你必须使用Fragments。   因此,所有活动都必须转化为片段。

那是错的。您可以选择使用活动,片段或混合物。

DrawerLayout只是ViewGroup。没有更多,没有更少。就像FrameLayoutRelativeLayoutLinearLayout和其他许多人一样。根据官方文档的定义:

  

ViewGroup是一个特殊视图,可以包含其他视图(称为   孩子。)

这正是DrawerLayout的内容。显示“抽屉式”界面的ViewGroup,可以使用滑动/拖动手势打开和关闭。

说了这么多,你在网上找到的几个教程使用片段只是因为它们是构建UI组件的模块化方式。但您也可以使用普通视图,例如官方指南中的示例:

在这里,您会看到ListView作为导航选项,FrameLayout将当前“主要内容”放在其中。

https://developer.android.com/training/implementing-navigation/nav-drawer.html

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

编辑:建议抽象活动:

(所有内容都是键入,可能是错误,只是一般方法)

public abstract BaseActivity extends Activity implements AdapterView.OnItemClickListener {
   public void onCreate(Bundle savedInstances){
       super.onCreate(savedInstances);
       super.setContentView(R.layout.base_activity); // that's the layout above

      // do here the logic to setup the `ListView` and listen to OnItemClick for the list items

      listView.setOnItemClickListener(this);
   }

   @Override
   public void setContentView (int layoutResID){
      // here we override setContentView force content inside the FrameLayout
      LayoutInflater.from(this)
         .inflate(layoutResID,
                  findViewById(R.id.content_frame, true);
   }

   @Override
   public void onItemClick (AdapterView<?> parent, View view, int position, long id){
        // here you navigate to a different activity
   }
}

答案 3 :(得分:0)

  

使用NavigationDrawer 使用Fragment

  • 不正确。尽可能拥有Activity s。 但是,Fragment应该代表更多的模块化和 可重复使用的UI块。
  

所有逻辑现在都位于Activity的{​​{1}}   所以NavigationDrawer文件的大小可能非常大而不是   维护友好。

  • 如果你看一下Google I/O app, 他们所做的就是创建一个包含所有内容的类Activitiy 常用功能(包括BaseActivity),然后全部 其他NavigationDrawer是从该类扩展而来的。这样,全部 Activity有许多常见功能,以及Activity, 但没有复制大量代码。
  

在Android中选择NavigationDrawer有什么含义?

  • 如上述两点所述,可以使用NavigationDrawer s OR Activity,并且可以将代码封装在可恢复的Fragment中,以便不重新生成相同的代码 到处。所以暗示肯定那个a BaseActivity 增加了代码结构的复杂性。 NavigationDrawer的目的是简化导航 否则,对于用户而言,管理将是复杂且乏味的 和程序员。