Red de conocimiento informático - Material del sitio web - Cómo evitar que Swipeerefreshlayout muestre el menú desplegable

Cómo evitar que Swipeerefreshlayout muestre el menú desplegable

La distancia de actualización desplegable de SwipeRefreshLayout es relativamente corta y no proporciona una API para configurar la distancia desplegable, pero al observar el código fuente de SwipeRefreshLayout, encontrará que hay una variable interna mDistanceToTriggerSync, que determina la distancia desplegable para activar una actualización. El siguiente código muestra cómo asignar un valor a esta variable en el código fuente:

Métricas finales de DisplayMetrics = getResources().getDisplayMetrics();

mDistanceToTriggerSync = (int) Math. min(( (View) getParent()).getHeight() * MAX_SWIPE_DISTANCE_FACTOR, REFRESH_TRIGGER_DISTANCE * metrics.density);

La operación anterior utiliza la altura de la vista principal y algunos MAX_SWIPE_DISTANCE_FACTOR (0.6) y REFRESH_TRIGGER_DISTANCE (120) constantes privadas, nosotros No se puede modificar directamente. OnGlobalLayoutListener() {

public void onGlobalLayout() {

métricas finales de DisplayMetrics = getResources().getDisplayMetrics();

Float mDistanceToTriggerSync = Math.min( ((Ver) swipeLayout.getParent( )).getHeight() * 0.6f, 500 * metrics.density);

prueba {

Campo campo = SwipeRefreshLayout.class.getDeclaredField( " mDistanceToTriggerSync");

field.setAccessible(true);

field.setFloat(swipeLayout, mDistanceToTriggerSync

} captura (Excepción e) {

e.printStackTrace();

}

ViewTreeObserver obs = swipeLayout.getViewTreeObserver();

obs.removeOnGlobalLayoutListener(this);

}

}

Copiar código

Para comparar este código con el siguiente, simplemente cambie REFRESH_TRIGGER_DISTANCE (120) Cambie el valor a 500, y encontrará que la distancia de actualización del menú desplegable se vuelve significativamente mayor