2012-04-15 17 views
6

Necesito deshabilitar totalmente overscroll en mis listas de vistas para poder implementar mi propia funcionalidad de sobrescritura.Deshabilitar listview overscroll en Samsung Galaxy Tab 2.3.3 android

Parece ser lo suficientemente simple cuando se observan las clases de vista de lista central, simplemente estableciendo el modo overscroll en OVERSCROLL_NEVER. Este fino trabajo en mi Samsung Galaxy s2. Pero no funciona para Galaxy Tab 2.3.3.

¿Alguien ha tenido mucha experiencia con las personalizaciones de Samsung ListView que pueden ayudarme?

Respuesta

2

Debe establecer el alto de la vista de lista en un valor de corrección. si su contenido es dinámicamente hay una función agradable para medir la listsize real después de restablecer el adaptador:

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

usted tiene que llamar a este método estático con su vista de lista como parametro después de configurar su adaptador. Ahora puede agregar una vista de desplazamiento (dentro está su vista de lista y otras vistas). Diría que este comportamiento en 2.3.3 un anterior es un pequeño error ... no hay una manera fácil de incluir la vista de lista dentro de una vista de desplazamiento excepto la forma que describí. Por esa razón introdujeron el modo OVERSCROLL_NEVER :)

El código es de DougW!

3

Se trabajó para mí en Samsung Galaxy Tab (con Android 2.2):

try { 

    // list you want to disable overscroll 
    // replace 'R.id.services' with your list id 
    ListView listView = ((ListView)findViewById(R.id.services)); 

    // find the method 
    Method setEnableExcessScroll = 
      listView.getClass().getMethod("setEnableExcessScroll", Boolean.TYPE); 

    // call the method with parameter set to false 
    setEnableExcessScroll.invoke(listView, Boolean.valueOf(false)); 

} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {} 
+0

Brillante !!! Esto realmente me ahorró muchas molestias. ¿Cómo se sabe qué nombre de método buscar, la API S2 es pública? – npace

Cuestiones relacionadas