2016-02-17 2 views
0

я следующий код в моей onCreate функции моей деятельности:Невозможно установитьLayoutManager в RecyclerView. Отображение нулевого указателя на RecyclerView

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LinearLayoutManager manager = new LinearLayoutManager(this); 
    manager.setOrientation(LinearLayoutManager.VERTICAL); 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(manager); 
    setContentView(R.layout.my_layout); 
    // some more code 

и my_layout.xml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/annonce.main.coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:ignore="RtlHardcoded"> 

    <android.support.design.widget.AppBarLayout...> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="none" 
     app:behavior_overlapTop="78dp" 
     android:fillViewport="true" 
     android:layout_gravity="fill_vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/card_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginBottom="8dp" 
      card_view:cardCornerRadius="4dp"> 

      <ListView 
       android:id="@+id/listView" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:choiceMode="singleChoice" 
       android:scrollbars="vertical" 
       app:behavior_overlapTop="78dp" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
      </ListView> 

     </android.support.v7.widget.CardView> 
    </android.support.v7.widget.RecyclerView> 
</android.support.design.widget.CoordinatorLayout> 

Я получаю сообщение об ошибке:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method void 
android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager) on a null object reference` in the line recyclerView.setLayoutManager(manager); 

Я попытался выполнить аналогичные запросы в предыдущих статьях sof, но ни один из них не выглядит d, чтобы решить мою проблему. Не могли бы вы рассказать мне, где я ошибаюсь в своем коде? Благодарю.

+1

движение 'setContentView (R.layout.my_layout);' к началу после 'super.onCreate (savedInstanceState);' –

+0

Это бросает ошибку 'Вызванный: java.lang.IllegalStateException: RecyclerView не имеет LayoutManager', который является очень я до этого добавил код LinearLayoutManager. –

+0

Извините, я только что заметил. Ваш макет неправильный. RecyclerView может содержать только представления, заполненные ** RecylerViewAdapter **. Проверьте эту ссылку, чтобы узнать, как использовать RecyclerView http://code.tutsplus.com/tutorials/getting-started-with-recyclerview-and-cardview-on-android--cms-23465 –

ответ

0

1) Как упоминались в ответе "@Much переполнения", изменить метод onCreate() к:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); // setting the layout first 

    LinearLayoutManager manager = new LinearLayoutManager(this); 
    manager.setOrientation(LinearLayoutManager.VERTICAL); 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(manager); 
} 

2) Удалить лишний Чайлдс из вашего RecyclerView XML.

Ваш my_layout.xml должно выглядеть:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/annonce.main.coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:ignore="RtlHardcoded"> 

    <android.support.design.widget.AppBarLayout...> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="none" 
     app:behavior_overlapTop="78dp" 
     android:fillViewport="true" 
     android:layout_gravity="fill_vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

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

И если вы хотите добавить точку зрения в вашем RecyclerView, вы должны использовать Adapter.

0

Вы пытаетесь найти RecyclerView перед настройкой макета. Сделать это

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); // setting the layout first 

    LinearLayoutManager manager = new LinearLayoutManager(this); 
    manager.setOrientation(LinearLayoutManager.VERTICAL); 
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(manager); 
} 
+0

Выполнение вышеуказанного порождает ошибку 'Caused по: java.lang.IllegalStateException: RecyclerView не имеет LayoutManager' в строке 'setContentView (R.layout.my_layout);' –

+0

Извините, что я только что заметил. Ваш макет неправильный. RecyclerView может содержать только представления, заполненные ** RecylerViewAdapter **. Проверьте эту ссылку, чтобы узнать, как использовать RecyclerView http://code.tutsplus.com/tutorials/getting-started-with-recyclerview-and-cardview-on-android--cms-23465 –

0

Почему у вас есть CardView и listView внутри RecyclerView? Я никогда не видел такой макет. В вашем макете что-то не так.

Попробуйте удалить детей recyclerView из файла макета.

+0

Так что мне нужно будет удалить CardView оттуда в другой файл xml, а затем включить этот новый XML-файл внутри этой удаленной части внутри RecyclerView? –

+0

RecyclerView использует адаптер, который действует как мост между данными и строками, показанными в recyclerview. Адаптер связан с ViewHolder, который инкапсулирует представление. Если вы посмотрите на простой образец, демонстрирующий RecyclerView, это будет ясно. [Ссылка] (http://developer.android.com/samples/RecyclerView/index.html) – greenrobo

Смежные вопросы