如何使用BaseActivity在所有活动中创建导航工具?

时间:2016-12-19 10:17:06

标签: android android-activity android-navigation-drawer

我正在创建一个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

的activity_base.xml文件
<?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的新手。

3 个答案:

答案 0 :(得分:1)

对于此用例,您可能不需要为每个页面都有一个活动xml,您可以拥有一个扩展BaseActivity的活动类,该活动类可以自定义活动/工具栏/导航绘制,然后您可以将常用功能拉到基本活动。所以BaseActivity在创建时进行设置,然后按活动类进行自定义。

答案 1 :(得分:1)

我遇到了类似的问题。但是,在我的情况下,有自定义NavigationDrawer和ActivityLayout使用数据绑定。解决方案是为NavigationDrawer使用相同的viewModel并为每个Activity创建布局。创建抽象BaseDrawerActivity,它具有获取布局资源Id的抽象方法。每个派生的Activity都将指定自己的资源。

答案 2 :(得分:1)

只需创建一个活动,它将扩展NavigationDrawerActivity并将所有功能设置为该活动,如onclick listener设置textviews和所有..现在如果你想要一个活动有导航抽屉你只需要扩展那个扩展了NavigationDrawerActivity的活动而不是使用setContentView你必须使用

   addview() 

与膨胀的观点..多数人..

希望它有所帮助!