我正在创建一个BaseActivity.java
类来包含导航视图和工具栏。
BaseActivity.java
public class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
private Toolbar toolbar;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
private NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//OTHER CODES TO SET UP NAVIGATION VIEW...
}
}
我正在创建一个包含DrawerLayout
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context="com.example.sumit.movie.MovieActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container"> ***MY PLACEHOLDER FRAGMENT***
</FrameLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_movie"
app:menu="@menu/activity_movie_drawer" />
</android.support.v4.widget.DrawerLayout>
正如您所看到的,我在此文件中有fragment_container
,我认为我会用它来插入其他活动的视图。对于每个活动,我都会创建一个相应的片段并将该片段插入此fragment_container
。
但是接下来我会对活动本身的xml文件做些什么呢?
我已阅读其他answers有关如何执行此操作的信息
他们说要创建一个BaseActivity.java
类并扩展这个类以创建其他活动
但是,我们是否也必须为此活动创建一个xml文件,这将创建导航视图和工具栏,它们将在所有活动中保持一致?
如果我不创建activity_base.xml
,只创建课程,我不得不编写REDUNDENT代码来设置每个活动xml中的导航抽屉和工具栏文件?
请帮我解决这个问题。我是android的新手。
答案 0 :(得分:1)
对于此用例,您可能不需要为每个页面都有一个活动xml,您可以拥有一个扩展BaseActivity的活动类,该活动类可以自定义活动/工具栏/导航绘制,然后您可以将常用功能拉到基本活动。所以BaseActivity在创建时进行设置,然后按活动类进行自定义。
答案 1 :(得分:1)
我遇到了类似的问题。但是,在我的情况下,有自定义NavigationDrawer和ActivityLayout使用数据绑定。解决方案是为NavigationDrawer使用相同的viewModel并为每个Activity创建布局。创建抽象BaseDrawerActivity,它具有获取布局资源Id的抽象方法。每个派生的Activity都将指定自己的资源。
答案 2 :(得分:1)
只需创建一个活动,它将扩展NavigationDrawerActivity并将所有功能设置为该活动,如onclick listener设置textviews和所有..现在如果你想要一个活动有导航抽屉你只需要扩展那个扩展了NavigationDrawerActivity的活动而不是使用setContentView你必须使用
addview()
与膨胀的观点..多数人..
希望它有所帮助!