1

Я развиваю библиотеку cardslib и реализую пример this.Карточки CardRecyclerView всегда null

Хотя я рабски следую инструкциям в уроке, когда создаю объект CardRecyclerView, этот объект всегда будет null.

Проверьте мой код:

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

    ArrayList<Card> cards = new ArrayList<Card>(); 

    //Create a Card 
    Card card = new Card(this);//getContext() 

    //Create a CardHeader and Add Header to card 
    CardHeader header = new CardHeader(this); 
    card.addCardHeader(header); 

    cards.add(card); 

    CardArrayRecyclerViewAdapter mCardArrayAdapter = new CardArrayRecyclerViewAdapter(this,cards); 
    //Staggered grid view 
    CardRecyclerView mRecyclerView = (CardRecyclerView) 
        this.findViewById(R.id.carddemo_recyclerview); //**mRecyclerView null here** 
    mRecyclerView.setHasFixedSize(false); //**NullPointerException here** 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    //Set the empty view 
    if (mRecyclerView != null) { 
     mRecyclerView.setAdapter(mCardArrayAdapter); 
    } 

    //Set card in the cardView 
    CardViewNative cardView = (CardViewNative) this.findViewById(R.id.carddemo); 
    cardView.setCard(card); 
} 

cardslib_activity_recycler.xml:

<it.gmariotti.cardslib.library.recyclerview.view.CardRecyclerView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    card:list_card_layout_resourceID="@layout/native_recyclerview_card_layout" 
    android:id="@+id/carddemo_recyclerview"/> 

cardslib_item_card_view:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    card_view:cardCornerRadius="4dp" 
    android:layout_margin="5dp"> 

<RelativeLayout android:id="@+id/nativecardlayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:background="?android:selectableItemBackground">   

    <!--some more layout--> 

</RelativeLayout> 
</android.support.v7.widget.CardView> 

Я не вижу, почему даже если я ссылающийся на CardRecyclerView объект правильно xml cardslib_activity_recycler.xml, я в конце концов считаю, что это ноль. Я что-то пропустил?

ответ

1

Возможно, потому что вы установили setContentView(R.layout.native_recyclerview_card_layout), но ваш CardRecyclerView находится в cardslib_activity_recycler.xml?

Технически findViewById находит только идентификатор, зарегистрированный в иерархии представления макета, установленный setContentView. Если вы хотите совместить представления, вы должны использовать <include>.

+0

Нет, потому что я устанавливаю новый идентификатор ресурса с помощью 'card: list_card_layout_resource_ID =" @ layout/native_recyclerview_card_layout', и поэтому, когда я его устанавливаю, он ссылается на 'cardslib_activity_recycler.xml' –

+1

@CrisBenois. Я действительно не знаю, что этот параметр потому что это пользовательское представление, но 'findViewById' выше только находит идентификатор, зарегистрированный в иерархии представления макета в' setContentView'. Если вы хотите объединить представления, вы должны использовать ''. – inmyth

+0

Я работаю над этим , но вы правы ... возможно, вам стоит рассмотреть вопрос об изменении вашего ответа. Если это сработает, я соглашусь с ним;) –

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

  • Нет связанных вопросов^_^