recyclerview Nav pievienots adapteris; izlaižot izkārtojumu

Savā kodā tikko ieviesu Recyclerview, aizstājot Listview.

viss darbojas labi. Objekti tiek parādīti.

bet logcat saka

15:25:53.476 E/RecyclerView﹕ Adapteris nav pievienots; izlaiž izkārtojumu.

15:25:53.655 E/RecyclerView﹕ Nav pievienots adapteris; izlaiž izkārtojumu.

kodam

ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

Kā redzat, esmu pievienojis adapteri Recycleview. tad kāpēc es turpinu saņemt šo kļūdu?

Esmu lasījis citus jautājumus, kas saistīti ar to pašu problēmu, bet neviens no tiem nepalīdz.

Risinājums

Vai varat pārliecināties, ka šos paziņojumus izsaucat no "main" pavediena (piemēram, onCreate() metodē). Tiklīdz es izsaucu šos pašus paziņojumus no "atliktās" metodes. Manā gadījumā ResultCallback, es saņemu to pašu ziņojumu.

Manā Fragment, izsaucot turpmāk minēto kodu no ResultCallback metodes iekšpuses, parādās tas pats ziņojums. Pēc koda pārcelšanas uz onConnected() metodi manā lietojumprogrammā ziņojums pazuda...

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );
Komentāri (9)

Es saņēmu tos pašus divus kļūdas ziņojumus, līdz es laboju divas lietas savā kodā:

(1) Pēc noklusējuma, ieviešot metodes RecyclerView.Adapter, tas ģenerē:

@Override
public int getItemCount() {
    return 0;
}

Pārliecinieties, ka kods ir atjaunināts tā, lai tajā būtu rakstīts:

@Override
public int getItemCount() {
    return artists.size();
}

Acīmredzot, ja jūsu vienībās ir nulle vienību, tad ekrānā tiks parādīta nulle lietu.

(2) Es to nedarīju tā, kā parādīts augšējā atbildē: https://stackoverflow.com/questions/24503760/cardview-layout-width-match-parent-does-not-match-parent-recyclerview-width.

//correct
LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_listitem, parent, false);

//incorrect (what I had)
LayoutInflater.from(parent.getContext())
        .inflate(R.layout.card_listitem,null);

(3) REDIĢĒT: BONUSS: Pārliecinieties, ka RecyclerView ir iestatīts šādi:

NE šādi:

Esmu redzējis dažas pamācības, kurās izmantota pēdējā minētā metode. Lai gan tā darbojas, manuprāt, tā arī rada šo kļūdu.

Komentāri (3)

Tas notiek, ja izveides fāzē nav iestatīts adapteris:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    ....
}

public void onResume() {
    super.onResume();
    mRecyclerView.setAdapter(mAdapter);
    ....
}

Vienkārši pārvietojiet adaptera iestatīšanu uz onCreate ar tukšiem datiem, un kad jums ir datu izsaukums:

mAdapter.notifyDataSetChanged();
Komentāri (1)