2016-12-19 5 views
0

Я создаю класс BaseActivity.java, чтобы отображать навигацию и панель инструментов.Как использовать BaseActivity для создания навигации по всем видам деятельности?

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... 


    } 
} 

Я создаю activity_base.xml файл, содержащий 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

Вы можете создавать все необходимые элементы управления программно в 'setContentView' ... – Selvin

ответ

1

Для этого варианта использования вам может не понадобиться операция xml для каждой страницы, у вас может быть только класс активности, который расширяет BaseActivity, который настраивает рисование активности/панели инструментов/nav, а затем вы можете вытаскивать общие функции до базы Мероприятия. поэтому BaseActivity делает настройку в нем для создания, тогда настройка выполняется для каждого класса активности.

1

Я столкнулся с аналогичной проблемой. Но в моем случае для CustomDayout использовался пользовательский интерфейс NavigationDrawer и ActivityLayout. Решение состоит в том, чтобы использовать один и тот же viewModel для NavigationDrawer и создать макет для каждого Activity. Создайте абстрактный BaseDrawerActivity, который имеет абстрактный метод для получения идентификатора ресурса макета. Каждая производная активность будет определять свой собственный ресурс.

1

Просто создайте одно действие, которое расширит функцию NavigationDrawerActivity и настроит все функциональные возможности для этой активности, например textviews для настройки прослушивателя onclick, и все .. теперь Если вы хотите, чтобы у Activity был навигационный ящик, вам просто нужно расширить эту активность, которая расширила NavigationDrawerActivity и вместо того, чтобы использовать вместо setContentView Вы должны использовать

addview() 

с надутым видом .. это все ..

Надеется, что это помогает !!!