2

Ich verwende eine RecyclerView wo ein Boolean in getItemCount() beteiligt ist. Dieser boolesche Wert steuert die Sichtbarkeit des letzten Elements in der RecyclerView, ähnlich wie eine Last mehr Sicht, aber etwas anders. Von Zeit zu Zeit ändert sich der Wert dieses Boolean, so dass RecyclerView wissen, ob das letzte Element enthalten sein soll.RecyclerView - Kontrolle der Anzahl von Elementen durch boolean

Der Code sieht so etwas wie diese

@Override 
public int getItemCount() { 
    return mItemArray.size() + (shouldShow ? 1 : 0); 
} 

Wenn der Wert von shouldShow aktualisiert wird, ich bin nicht notifyDataSetChanged() oder notifyItemChanged() nennen, aber die RecyclerView noch richtig aktualisiert wird. Aber ich mache mir Sorgen, dass es schließlich dazu führen wird, dass der RecyclerView wegen Inkonsistenz abstürzt. Meine Fragen sind,

  1. wird mit einem dynamischen boolean Wert in getItemCount() eine richtige Art und Weise RecyclerView Größe zu kontrollieren?
  2. Sollte ich notify...() aufrufen, wenn sich der Wert dieses boolean ändert?
  3. Würde mein RecyclerView wegen Inkonsistenz abstürzen?

Antwort

0

1.nicht ein Problem, bis Sie int darin 2.there keine Notwendigkeit, rufen notifydatasetchanged sind vorbei (wir sollten sie anrufen, wenn ihre Änderung in der Adapter Daten) 3.there wird nicht jede Konsistenz

+0

Vielen Dank für die Beantwortung, aber was meinst du mit "Passing int in it"? – katie

+0

ich meine als getItemCount return int sollten wir nur int Werte übergeben, Sie übergeben 1 oder 0 basierten booleschen Wert ist es korrekt –

0

1.It ist ok
2. Wenn Sie das letzte Element gezeigt direkt nach boolean Variable wird geändert Sie notifyDataSetChanged() nennen sollen, weil getItemCount() nicht durch den Adapter bis zum Recycler Ansicht gescrollt wird aufgerufen werden.
3. Die App kann abstürzen, wenn Sie nicht das gesamte Verhalten behandeln. Beispielsweise nehmen Sie einen Artikel aus Ihrer mItemArray innerhalb onBindViewHolder() Methode, und wenn getItemCount() die Zahl größer als die Größe Ihres Arrays zurückgibt, wird die App IndexOutOfBoundException werfen. In diesem Fall sollten Sie prüfen, ob die Position kleiner als die Größe Ihres Arrays ist.

if (position < mItemArray.size()){ 
    //you can get item from the array 
} else { 
    //handle your additional item 
} 
+0

Hallo, vielen Dank für Ihre Antwort. Ich kümmere mich um all das, was mit dem mItemArray zu tun hat, ich mache mir nur Sorgen um den Booleschen Code. – katie

Verwandte Themen