ho creato una preferenza personalizzato che ha il seguente costruttoreonCreateView() chiamato troppo spesso a preferenza personalizzato
public CoordinatesPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setLayoutResource(R.layout.coordinates_preference);
}
E ho sovrascritto onCreateView()
così scrive nel registro come questo:
@Override
protected View onCreateView(ViewGroup parent)
{
Log.d("test", "Creating Preference view");
return super.onCreateView(parent);
}
e il mio registro è pieno di "Creating Preference view"
messaggi, questo crea una sensazione di rallentamento per lo scorrimento e credo che la vista di conversione dovrebbe risolvere questo, ho dato un'occhiata al codice sorgente delle preferenze e se la vista di conversione è nullo viene chiamato onCreateView()
.
a scopo di test ho aggiunto questo metodo:
@Override
public View getView(View convertView, ViewGroup parent)
{
if (convertView == null)
{
return super.getView(convertView, parent);
}
return super.getView(convertView, parent);
}
e impostare un punto di interruzione. Ho scoperto che quasi sempre la mia vista di conversione è nullo. e quindi deve creare una nuova visione, perché è questo? e come posso migliorare questo per evitare una schermata di preferenza laggiante?
MODIFICA: Modificato il modo in cui viene chiamato onCreate, ora è tutto Android. Io uso solo setLayoutResource
. ma questo non risolve il problema ...
EDIT2: ho usato Debug.StartMethodTracing()
e ho trovato come sospetto che il 55% del tempo trascorso (quando sto solo scorrendo su e giù) sia speso per l'inflazione di la preferenza dal metodo onCreateView()
che viene chiamato da getView()
quando convertView
è nullo.
Grazie, Jason
Puoi incollare uno screenshot di come appaiono le tue preferenze? – Macarse
Sicuro. Ne posterò uno quando arrivo a casa – Jason
Puoi mettere il tuo file preferences.xml? Ho un'idea su questo e vorrei confermare che la tua configurazione è come la mia. – ThomasW