2016-12-19 2 views
0

Я хотел бы обернуть в DrawerLayout FrameLayout (чтобы заменить его по требованию с другими FrameLayouts во время выполнения). Ниже приведен код из проекта GitHub за here.FrameLayout в DrawerLayout

Но если добавить FrameLayout в LinearLayout ниже widget.Toolbar, я получаю следующее исключение

Unhandled Exception: 
System.InvalidCastException: Unable to convert instance of type 'Android.Widget.FrameLayout' to type 'Android.Support.Design.Widget.NavigationView'. 

без FrameLayout он прекрасно работает. Где я должен разместить FrameLayout для достижения моей цели?

<?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" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawer_layout" 
    android:fitsSystemWindows="true"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" />  

    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:id="@+id/nav_view" 
     app:menu="@menu/navmenu" 
     app:headerLayout="@menu/header" /> 
</android.support.v4.widget.DrawerLayout> 

В MainAcitivty.cs

drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 

    // Init toolbar 
    var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); 
    SetSupportActionBar(toolbar); 

    // Attach item selected handler to navigation view 
    var navigationView = FindViewById<NavigationView>(Resource.Id.nav_view); 
    navigationView.NavigationItemSelected += NavigationView_NavigationItemSelected; 

    // Create ActionBarDrawerToggle button and add it to the toolbar 
    var drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.open_drawer, Resource.String.close_drawer); 
    drawerLayout.AddDrawerListener(drawerToggle); 
    drawerToggle.SyncState(); 
+0

Я думаю, что проблема является фактический код, который вы использовали, чтобы получить ссылку представления. Вы не можете использовать FrameLayout для навигации. Ваш XML не должен давать эту ошибку –

+0

Я добавил код для соответствующего пользовательского интерфейса. Без FrameLayout в axml он работает безупречно. –

+0

Я думаю, что FrameLayout должен быть за пределами LinearLayout для панели инструментов, но я не вижу в этом ничего плохого. Вероятно, вы, должно быть, используете CoordinatorLayout вместо DrawerLayout. –

ответ

0

<?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" 
 
    android:background="@color/white" 
 
    tools:openDrawer="start"> 
 

 
    <LinearLayout 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content"> 
 
     <include layout="@layout/toolbar" android:id="@+id/drawer_toolbar"/> 
 
     <FrameLayout 
 
      android:layout_width="match_parent" 
 
      android:layout_height="match_parent" 
 
      android:id="@+id/framelayout"/> 
 
    </LinearLayout> 
 

 
    <android.support.design.widget.NavigationView 
 
     android:id="@+id/nav_view" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:layout_gravity="start" 
 
     android:fitsSystemWindows="true" 
 
     app:headerLayout="@layout/nav_header_main"> 
 
     <!-- app:menu="@menu/activity_main_drawer"--> 
 

 
     <ExpandableListView 
 
      android:id="@+id/navigationmenu" 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="match_parent" 
 
      android:layout_gravity="start|right" 
 
      android:divider="#f0f0f0" 
 
      android:dividerHeight="1.5dp" 
 
      android:indicatorEnd="?android:attr/expandableListPreferredItemIndicatorRight" 
 
      android:layout_marginTop="170dp" 
 
      android:background="@android:color/white" 
 
      android:visibility="visible"> 
 
     </ExpandableListView> 
 
    </android.support.design.widget.NavigationView> 
 
</android.support.v4.widget.DrawerLayout>