Ошибка "Идентификатор ресурса не найден" с образцом проекта Android

Я пытаюсь открыть образец Android-проекта - Ящик навигации в Android Studio, но получил ошибку при его создании.

Это шаги для его воспроизведения:

  • На странице приветствия Android Studio выберите Импортировать образец кода Android
  • Найдите Ящик навигации, выберите его и нажмите "Далее"
  • Укажите местоположение проекта и нажмите "Готово"

Ошибка: (43) Идентификатор ресурса не найден для атрибута 'layoutManager' в пакете 'com.example.android.navigationdrawer'

Версия Android Studio - 1.4 Beta 4

Заранее благодарим за помощь.

Ответы

Ответ 1

Компилятор не может найти этот атрибут в activity_navigation_drawer.xml:

app:layoutManager="LinearLayoutManager"

Чтобы исправить этот

  • Удалите этот атрибут из XML, чтобы ваш Recyclerview выглядел так:

    <android.support.v7.widget.RecyclerView
    android:id="@+id/left_drawer"
    android:scrollbars="vertical"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start"
    android:choiceMode="singleChoice"
    android:divider="@null"/>
    
  • нажмите кнопку Gradle Sync

  • В NavigationDrawerActivity добавьте следующие 2 строки кода в свой OnCreate();

    LinearLayoutManager mLinearLayoutmanager = new LinearLayoutManager(this);
    mDrawerList.setLayoutManager(mLinearLayoutmanager);
    

Итак, теперь ваш код выглядит следующим образом:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_navigation_drawer);

    mTitle = mDrawerTitle = getTitle();
    mPlanetTitles = getResources().getStringArray(R.array.planets_array);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (RecyclerView) findViewById(R.id.left_drawer);

    LinearLayoutManager mLinearLayoutmanager = new LinearLayoutManager(this);
    mDrawerList.setLayoutManager(mLinearLayoutmanager);
    ....

Удачи.

Edit: Причина, по которой этот исходный xml-код больше не работает, скорее всего, что пространство имен xmlns:app="http://schemas.android.com/apk/res-auto" больше не поддерживает атрибут layoutManager.

Более подробную информацию о пространстве имен можно найти здесь: fooobar.com/questions/49431/...

Ответ 2

Вы, безусловно, можете определить LayoutManagers и многое другое через xml. Вот пример использования собственного GridLayoutManager:

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/posters_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:orientation="vertical"
    app:layoutManager="android.support.v7.widget.GridLayoutManager"
    app:reverseLayout="false"
    app:spanCount="3"
    app:stackFromEnd="false" />

Если вы хотите использовать пользовательский LayoutManager, следуйте правилам, указанным здесь:

R.attr.html#layoutManager

Ответ 4

Вы уверены, что gradle разрешил все зависимости? У меня была такая же проблема, когда я иногда удалял библиотеку поддержки recyclerview из зависимостей:

  compile 'com.android.support:recyclerview-v7:25.0.1'