2016-02-18 3 views
0

Я пытаюсь реализовать навигацию в своем приложении, но столкнулся с несколькими проблемами, от которых я не могу избавиться.Реализация навигационного ящика

Когда я пытаюсь запустить приложение, я получаю следующую ошибку. Я попытался изменить различные импорты для фрагментов, я также попытался расширить действие, чтобы расширить фрагменты, но I \, которые дали еще больше ошибок, и пришлось изменить его обратно в AppCompatActivity.

Ошибка

Caused by: java.lang.ClassCastException: android.support.design.widget.CoordinatorLayout cannot be cast to android.support.v4.widget.DrawerLayout 
02-18 14:31:11.535 16698-16698/com.example.rory.pocketchef E/AndroidRuntime:  at com.example.rory.pocketchef.MainActivity.onCreate(MainActivity.java:42) 

линия, реализующая панель навигации

drawerFragment = (FragmentDrawer) getFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar); 
    drawerFragment.setDrawerListener(this); 

Основная деятельность XML, для навигации фрагмента ящика

<android.support.design.widget.CoordinatorLayout 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" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout"> 

    <android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     app:tabGravity="fill"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <fragment 
    android:id="@+id/fragment_navigation_drawer" 
    android:name="com.example.rory.pocketchef.FragmentDrawer" 
    android:layout_width="@dimen/nav_drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:layout="@layout/fragment_navigation_drawer" 
    tools:layout="@layout/fragment_navigation_drawer" /> 
</android.support.design.widget.CoordinatorLayout> 
+1

Просим выслать ваш activity.xml. Ваш DrawerLayout выглядит как CoordinatorLayout ... –

+0

Выполнено, я использую табулированные представления для разных действий, если это имеет значение – JJSmith

+0

Проблема, похоже, в этой строке: 'setUp (R.id.fragment_navigation_drawer, (DrawerLayout) findViewById (R.id.drawer_layout), 'который вы добавили' drawer_layout' из 'CoordinatorLayout' и как' DrawerLayout' – Mohsen

ответ

1

Не используйте CoordinatorLayout, если вы хотите DrawerLayout. Оберните ваш CoordinatorLayout в DrawerLayout:

<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"> 
    <!-- The main content view --> 
    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <!-- Your stuff --> 

    </android.support.design.widget.CoordinatorLayout> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

Более подробную информацию можно найти здесь: http://developer.android.com/intl/es/training/implementing-navigation/nav-drawer.html

+1

Кроме того, в новой библиотеке поддержки есть хорошая вещь, называемая 'NavigationView', а не' ListView'. – Mohsen

+0

Конечно, я просто Скопировал его из обучения в андроиде, и его можно оптимизировать. –

+0

Спасибо за помощь! Посмотрите документацию лучше, прежде чем я задам другой вопрос. – JJSmith

1

Попробуйте это:

<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"> 
    <!-- The main content view --> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <!-- Your stuff --> 

В вашем Java, добавить идентификатор DrawerLayout «s и не CoordinatorLayout :

drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar); 
+0

Итак, все нормальные макеты для основной деятельности должны проходить вложенном CoordinatorLayout, а затем только то, что у меня есть для фрагмента навигации, чтобы попасть в DrawerLayout – JJSmith

+0

Actuall y, «Фрагменты» должны быть в «CoordinatorLayout», а porpuse использования «DrawerLayout» - это реализация «NavigationDrawer». Итак, ваше содержимое должно быть «CoordinatorLayout», как я заметил, что в комментариях к вышеуказанным кодам. – Mohsen

+0

Спасибо за помощь! +1 – JJSmith