Estou usando o ViewPager no meu aplicativo e defino-o na Atividade principal. onCreate
Método interno Carrego um número de páginas de SharedPreferences e depois o passo para PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
O problema é que, se eu alterasse esse número nas Preferências (ou em outra Atividade) para outro índice de página menor do que o visto anteriormente, meu aplicativo trava porque esse índice fica fora dos limites ao retornar à atividade com este ViewPager. Pode ser corrigido simplesmente alterando a página do ViewPager ativo. Há alguma forma de fazer isso?
fonte
0
noonPause
método e não há falhas. Obrigado.deslize para a direita
viewPager.arrowScroll (View.FOCUS_RIGHT);
deslize para a esquerda
viewPager.arrowScroll (View.FOCUS_LEFT);
fonte
Sem verificar seu código, acho que o que você está descrevendo é que suas páginas estão fora de sincronia e você tem dados obsoletos.
Você diz que está alterando o número de páginas e travando porque está acessando o antigo conjunto de páginas. Parece-me que você não está ligando
pageAdapter.notifyDataSetChanged()
depois de alterar seus dados.Quando você
viewPager
estiver exibindo a página 3 de um conjunto de 10 páginas e você mudar para um conjunto com apenas 5 e depois ligarnotifyDataSetChanged()
, o que você verá é que agora está visualizando a página 3 do novo conjunto. Se você estava visualizando a página 8 do conjunto antigo anteriormente, após colocar o novo conjunto e ligar,notifyDataSetChanged()
verá que agora está visualizando a última página do novo conjunto sem travar.Se você simplesmente mudar sua página atual, pode estar apenas ocultando o problema.
fonte
notifyDataSetChanged()
para mudar para outra página, tente com este código:
fonte
viewPager.setCurrentItem
Resposta complementar
Originalmente, estava tendo problemas para obter uma referência ao
ViewPager
método de outros métodos de classe porqueaddOnTabSelectedListener
criava uma classe interna anônima, que por sua vez exigia que aViewPager
variável fosse declaradafinal
. A solução foi usar uma variável de membro da classe e não a classe interna anônima.fonte