adicionar dinamicamente dados de visualização ao adaptador de galeria do Android
-
29-10-2019 - |
Pergunta
Estou tentando criar uma agenda usando o widget Galeria. Eu tenho uma classe de exibição do mês que lida com a criação de uma exibição para um mês específico. Minha classe MonthGallery usa a exibição de mês como suas exibições filhas, enquanto meuadaptador de exibição de mês cria as exibições de mês para a galeria de mês. O problema que estou tendo é tentar atualizar o adaptador com o mês anterior e seguinte enquanto o usuário rola ou joga para o mês anterior ou seguinte. Eu uso a posição fornecida na galeria onItemSelectedListener para adicionar meses à frente e atrás do adaptador, dependendo desta posição. Por exemplo:
OnItemSelectedListener mGalleryOnItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterview, View view, int position, long id) {
MonthView mv = (MonthView) view;
int month = mv.getMonth();
int year = mv.getYear();
updateMonthBar(month, year);
if ((position + 1) == mMonthViewGallery.getCount()) {
if (Calendar.DECEMBER == month) {
mMonthViewAdapter.addView(Calendar.JANUARY, year + 1);
} else {
mMonthViewAdapter.addView(month + 1, year);
}
mMonthViewGallery.setSelection(position);
}
if (0 == position) {
if (Calendar.JANUARY == month) {
mMonthViewAdapter.addViewToFront(Calendar.DECEMBER, year - 1);
} else {
mMonthViewAdapter.addViewToFront(month - 1, year);
}
mMonthViewGallery.setSelection(1);
}
}
PROBLEMA
Depois que o usuário rola para outro mês e tenta rolar para o primeiro mês, a galeria não passa automaticamente para a próxima seleção. No adaptador, quando addView (int month, int year) é chamado, ele chamará NoticeDataSetChanged () para que atualize a galeria com o mês anterior ou seguinte, mas isso parece causar o "encaixe" inesperado ao rolar lentamente. Só não tenho certeza de como estruturar isso para que a rolagem seja suave.
EDITAR
Agora estou usando Gallery.setCallbackDuringFling (false), mas há uma maneira de desativar o retorno de chamada onitemselected ao rolar a galeria e chamar onitemselected () quando terminar de rolar?
Solução
galeria usada de Substitui o widget da Galeriacom Ver a reciclagem existe?
removeu uma linha do onScroll()
postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);
Outras dicas
Isso é garantido sobre notificarDatasetChanged () chamado quando addView () chamado
Acho que você pode verificar isso ..
Eu costumava chamar notificarDatasetChanged () imediatamente quando tocava nas visualizações dentro de um adaptador.