据我所知,使用Navigation Drawer (android.support.v4.widget.DrawerLayout)
时,您必须使用碎片。
所以所有活动都必须转化为片段。
此外,所有逻辑现在都将驻留在Navigation Drawer
的活动中,因此活动文件的大小可能非常大而且不便于维护。
是否还有其他影响,是否有更容易解决这些问题的方法?
答案 0 :(得分:0)
我前一段时间制作了一个应用程序并且我没有将所有活动转换为片段,而只是一种主菜单,然后当你参与一些"不同的"在你回来之前你没有抽屉的活动,它甚至可能很烦人。
至于逻辑我把一些片段(与每个片段相关)放在维护中。
答案 1 :(得分:0)
单一活动的原因很简单。这是因为你希望它保持持久性。
如果你有多个活动,他们都需要实现相同的抽屉布局,这会导致你多次充气和填充抽屉。
活动只是充当片段和抽屉布局的容器。它就像是两者之间的桥梁。
答案 2 :(得分:0)
我相信你的观念错了。让我解释一下原因。
据我所知,使用导航抽屉时 (android.support.v4.widget.DrawerLayout),你必须使用Fragments。 因此,所有活动都必须转化为片段。
那是错的。您可以选择使用活动,片段或混合物。
DrawerLayout
只是ViewGroup
。没有更多,没有更少。就像FrameLayout
,RelativeLayout
,LinearLayout
和其他许多人一样。根据官方文档的定义:
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
文件的大小可能非常大而不是 维护友好。
Activitiy
常用功能(包括BaseActivity
),然后全部
其他NavigationDrawer
是从该类扩展而来的。这样,全部
Activity
有许多常见功能,以及Activity
,
但没有复制大量代码。在Android中选择
NavigationDrawer
有什么含义?
NavigationDrawer
s
OR Activity
,并且可以将代码封装在可恢复的Fragment
中,以便不重新生成相同的代码
到处。所以暗示肯定不那个a
BaseActivity
增加了代码结构的复杂性。
NavigationDrawer
的目的是简化导航
否则,对于用户而言,管理将是复杂且乏味的
和程序员。