Viste memorizzate nella cache da Listadapter
-
12-11-2019 - |
Domanda
Quando viene visualizzato un elenco e scorrere intorno, ListAdapter.GetView () () Crea una nuova vista elemento dell'elenco o riattivare una vista esistente passata ad esso (come "ConvertView) per visualizzare nuovi contenuti.
Mi sto chiedendo, se c'è un modo per ottenere tutte le visualizzazioni create da GetView ()?Per esempio.Se le viste dell'elenco delle voci devono liberare qualche risorsa quando l'attività viene distrutta, sarebbe bello passare attraverso tutte le viste degli articoli di elenco e dire loro di rilasciare la risorsa.
Soluzione
beh, è non come semplice come interating attraverso il ListView
utilizzando ListView#getChildAt(int)
: il ListView
è una sottoclasse AbsListView
- e AbsListView
implementa il RecycleBin
utilizzato per contenere View
sriutilizzato.
Prima che un View
sia inserito nel RecycleBin
è distaccato dal suo genitore (la visualizzazione elenco) utilizzando ViewGroup#detachViewFromParent(View)
, rendendolo così accessibile utilizzando getChildAt(int)
.
Cosa dovresti implementare è l'interfaccia RecyclerListener
che ti avviserà quando un View
viene spostato in RecycleBin
.
Altri suggerimenti
Poiché ListView
è un ViewGroup
, dovresti essere in grado di iterare sulle viste sui bambini come questa:
for (int i=0; i < myListView.getChildCount(); i++) {
View v = myListView.getChildAt(i);
//Check to see if this view has the resource, then release it
}
.
Qualcosa di simile era necessario in questa domanda: Android: Accedi alle viste per bambini da AListiew
È Java.Non è possibile ordinare l'applicazione o l'istanza di essere realmente distrutta in modo da liberare le risorse.Con finalizzare () puoi aumentare la probabilità che la macchina Java lo farà.
A meno che il tuo adattatore non venga utilizzato al di fuori di questa attività (nel qual caso, non sai davvero che non hai più bisogno di queste opinioni giuste?), il tuo unico riferimento / i a questo adattatore è all'interno dell'attività.Ciò significa che se la tua attività è la spazzatura raccolta il tuo adattatore sarà raccolto spazzatura, il che significa che le tue opinioni saranno raccolte.Non mi preoccuperei di cercare di ottimizzare questo a meno che tu non abbia un problema misurabile con questo comportamento.