Actualizar Actualización de Android Desplácese hasta actualizar
He implementado un despliegue refrescar diseño para mi vista de cuadrícula y funciona perfectamente si me tire (desplazamiento) hacia abajo para la actualización a ser llamado.
Sin embargo, estoy tratando de averiguar cómo actualizar cuando el usuario se desplaza hacia arriba. Así que cuando el usuario alcanza el último de los elementos de la cuadrícula (mi límite es 10) así que cuando el usuario ve todos los diez y luego tira hacia arriba o trata de seguir para desplazarse ¿cómo puedo actualizar entonces?
- ¿Cuál es la forma correcta de usar la barra de herramientas y SwipeRefreshLayout?
- Cómo pasar la matriz int de identificadores de recursos de color desde array.xml a SwipeRefreshLayout.setColorSchemeResources
- SwipeRefreshLayout: Desplazar la animación de progreso
- SwipeRefreshLayout dentro de ViewPager
- Desplazar SwipeRefreshLayout con RecyclerView Actualizar en cualquier lugar de android 2.2
Cualquier ayuda es apreciada.
- SwipeRefreshLayout - desliza el dedo hacia abajo para actualizar pero no mueve la vista hacia abajo
- SwipeRefreshLayout + WebView cuando la posición de desplazamiento está en la parte superior
- Scrollup no funciona en StickyListviewHeader con SwipeRefreshLayout
- No hay interrupción en SwipeRefreshLayout.java en el módulo android 5 onInterceptTouchEvent
- Android: CoordinatorLayout y SwipeRefreshLayout
- SwipeRefreshLayout sin animación en la creación de fragmentos
- ¿Cómo usar SwipeRefreshLayout?
- SwipeRefreshLayout desactivar la animación de arrastre en el dedo hacia abajo
Así que las personas o bien: no saben la respuesta a esta pregunta o b: no están dispuestos a compartir el conocimiento.
De todos modos después de mucho tiempo me propuse mi propia solución. He añadido un oyente de desplazamiento a mi cuadrícula, y calculado cuando me desplacé a la parte inferior de la pantalla, en este momento recuerdo el método onRefresh () desde el golpe para actualizar …
EDIT para agregar más información
Por lo tanto, después de hacer algunas investigaciones para calcular cuándo el usuario llegó a la parte inferior de una vista de la cuadrícula seguí preguntas como ésta y otras para conseguir eso. A continuación se muestra el código que tuve que modificar para que funcione con la funcionalidad de actualización nativa. Mis alteraciones fueron para evitar refrescarse constante. Así que incluido en mi declaración if es un cheque que no está actualizando, así que cuando llegué a la parte inferior se actualizó, pero no tenía ese cheque por lo que constantemente actualizado. Entonces tuve que hacer un cheque contra la cantidad total de elementos en mi cuadrícula, como cuando el usuario alcanzó el último elemento (último elemento) la aplicación también se mantuvo refrescante y no había nada para romper el ciclo. Esperemos que esto sea de alguna ayuda …
worldBeersGrid.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { int position = firstVisibleItem+visibleItemCount; int limit = totalItemCount; int totalItems = sharedpreferences.getInt("WORLD ITEM COUNT", 0); Log.i("TOTAL WORLD ITEMS", String.valueOf(totalItems)); Log.i("LIMIT :::::::::::: ", String.valueOf(limit)); Log.i("POSITION ::::::::::::", String.valueOf(position)); Log.i("REFRESHING :::::::::::::::", String.valueOf(swipeRefreshLayout.isRefreshing())); if(position>=limit && totalItemCount>0 && !swipeRefreshLayout.isRefreshing() && position <totalItems){ swipeRefreshLayout.setRefreshing(true); //In the below method I made my call to my ws... onRefresh(); } } });
Ver mi respuesta en stackoverflow
SwipeRefreshLayout de la versión 21 de la Biblioteca de soporte de Android no admite la extracción desde la parte inferior. He hecho la modificación SwipeRefreshLayoutBottom con se basa en el código original de SwipeRefreshLayout. Se basa totalmente en el código original de Google con sólo la inversión de coordenadas y el nuevo método canChildScrollDown. Todas las modificaciones están marcadas como TODO.
Repositorio de Bitbucker
Usted intenta de esta manera
listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { boolean enable = false; if(listView != null && listView.getChildCount() > 0){ // check if the first item of the list is visible boolean firstItemVisible = listView.getFirstVisiblePosition() == 0; // check if the top of the first item is visible boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0; // enabling or disabling the refresh layout enable = firstItemVisible && topOfFirstItemVisible; } swipeRefreshLayout.setEnabled(enable); }});
Otra respuesta si alguien sigue interesado. Para actualizar al desplazar hacia abajo, he implementado el onRefreshListerner () en el swipeRefreshLayout.
swipeRefreshLayout = (SwipeRefreshLayout) getView().findViewById(R.id.swipe_messages); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { swipeRefreshLayout.setRefreshing(true); ( new Handler()).postDelayed(new Runnable() { @Override public void run() { refresh(); } }, 1000); } });
Pero para actualizar al desplazarse hacia arriba y sólo cuando llegué al final de la lista, he implementado OnTouchListener () en la lista que incluye el swipeRefreshLayout.setRefreshing (true) para iniciar el efecto:
listView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == android.view.MotionEvent.ACTION_UP) { if (listView.getLastVisiblePosition() == listView.getAdapter().getCount() -1 && listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight()) { swipeRefreshLayout.setRefreshing(true); ( new Handler()).postDelayed(new Runnable() { @Override public void run() { refresh(); } }, 1000); } } return false; } });
Por supuesto tienes que deshabilitar el swipeRefreshLayout después de actualizar tu lista:
public void refresh (){ //Do something neat here to refresh your list swipeRefreshLayout.setRefreshing(false); }
He utilizado esta respuesta para saber cuándo llegué al final de la lista: