2013-01-19 13 views
12

Ho notato oggi che il PagerAdapter viene chiamato una grande quantità di volte. Ho contato 393 mentre scorrevo le pagine lentamente. Ho visto this question ma in realtà non mi ha fornito una buona risposta.Perché getCount viene chiamato così tante volte in PagerAdapter?

  1. È normale
  2. Se è così, perché è che il metodo getCount si chiama così spesso?

Giusto per essere chiari, sto cercando una risposta più ampia di quella nella domanda fornita. Mi rendo anche conto che devo mantenerlo altrettanto velocemente e che non ho il controllo su come viene chiamato, ma non è questa la domanda qui.

+0

Quando leggi il codice sorgente su 'ViewPager', per trovare le risposte alle tue domande, che cosa hai imparato? – CommonsWare

+0

@CommonsWare Ho imparato che è usato in diversi posti. In particolare, OnTouchEvent. Sto indovinando che questo è dove viene chiamato ogni volta che sposto il cercapersone. È corretto? – Qw4z1

+3

Non ho visto 'ViewPager' in quest'area. Se 'getCount()' viene chiamato su ogni evento touch, tuttavia, questo spiegherebbe sicuramente il conteggio delle chiamate alte. – CommonsWare

risposta

4

Come hai concluso, viene utilizzato molto in onTouchEvent. OnTouchEvent viene chiamato ogni volta che si interagisce con lo schermo, vale a dire toccare spostare e rilasciare eventi. Lo spostamento di un solo pixel comporterebbe una potenziale chiamata a questo metodo.

Non c'è molto altro da spiegare, è solo il modo in cui è implementato. Solitamente adapter.getCount è implementato con qualcosa come List.getSize o Cursor.getCount. E ha quasi zero in testa. Se questo è un problema, ottimizza il metodo ListAdapter.getCount, memorizza il conteggio o qualcosa del genere. Esegui solo cose complesse là dove necessario e memorizza nella cache il risultato finché non diventa non valido.

Problemi correlati