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();
Я думаю, что проблема является фактический код, который вы использовали, чтобы получить ссылку представления. Вы не можете использовать FrameLayout для навигации. Ваш XML не должен давать эту ошибку –
Я добавил код для соответствующего пользовательского интерфейса. Без FrameLayout в axml он работает безупречно. –
Я думаю, что FrameLayout должен быть за пределами LinearLayout для панели инструментов, но я не вижу в этом ничего плохого. Вероятно, вы, должно быть, используете CoordinatorLayout вместо DrawerLayout. –