Android lista ver espacio extra al final cuando se desplaza

He experimentado un comportamiento extraño con desplazamiento suave en listview. Tengo 30 artículos en la lista. Cuando me desplazo

listview.smoothScrollToPositionFromTop(29, 0); 

Habrá un espacio extra al final de la pantalla. En realidad listview cambia un poco. Imagen adjunta a continuación. Pero si me desplazo manualmente no habrá espacio. ¿Qué se puede hacer para resolver este comportamiento?

Imagen 1

Aquí está mi diseño:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_orange_light"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout> 

Como ya dijiste, creo que es un problema de Android. Parece ser parte de la animación para más de desplazamiento, parece que se 'atascado' antes de completar la animación. He tenido una experiencia similar con SwipeToRefresh , donde el indicador de progreso no desaparece completamente después de la actualización.

De todos modos, puede solucionar el problema desactivando la animación

  listView.setOverScrollMode(View.OVER_SCROLL_NEVER); 

Desafortunadamente, esto pierde la animación incluso si se desplaza manualmente. Si puedes vivir con eso, creo que esto solucionará tu problema.

AbsListView # setOverScrollMode (int)

EDIT: (después de aceptar la respuesta original)

También he encontrado otro trabajo alrededor. Esto preserva la animación de desplazamiento. Desafortunadamente, tiene otro inconveniente. Si el usuario se desplaza automáticamente antes de hacer otra cosa, existe el mismo problema del borde en la parte inferior. Si el usuario se desplaza manualmente a la parte inferior, no hay problema a partir de entonces. Si el usuario se desplaza automáticamente y obtiene el borde, luego se desplaza manualmente, no más problema. Así que, aquí está el método alternativo.

  Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.invisible_footer, null); listView.setOverscrollFooter(drawable); 

En la carpeta dibujable, "invisible_footer.xml"

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="2dp" android:width="10dp" android:viewportWidth="10" android:viewportHeight="2"> <!-- a horizontal line --> <path android:pathData="M 1 1 H 10" android:strokeColor="#00000000" android:strokeWidth="1" /> </vector> 

ListView.html # setOverscrollHeader ()

Esto le da opciones:

  1. Perder la animación de desplazamiento
  2. Retenga la animación pero el usuario de riesgo ve el borde inferior 1 vez

He implementado Pero, en la primera vez inicial que mantener el relleno en la parte inferior, pero, desde la segunda vez su trabajo bien.

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_list" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.socialintegration.ListAct"> <ListView android:id="@+id/listTemp" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </RelativeLayout> 

CÓDIGO:

 public class ListAct extends AppCompatActivity { ListView l; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); String str[] = new String[50]; for (int i = 0; i < 50; i++) { str[i] = "poistion" + i; } ArrayAdapter adpt = new ArrayAdapter(ListAct.this, android.R.layout.simple_dropdown_item_1line, str); l = (ListView) findViewById(R.id.listTemp); l.setAdapter(adpt); l.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { l.smoothScrollToPositionFromTop(29, 0); } }); } } 
 <ListView> android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior/> 

Ok, prueba: app: layout_behavior = "@ string / appbar_scrolling_view_behavior"

¿Ha intentado establecer la altura de su ListView en wrap_content lugar de match_parent ?

Incluso en [este tutorial] todos los atributos están definidos como wrap_content . Así que reemplace sus atributos ListView en el ancho y la altura a:

 <ListView android:id="@+id/listview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

Hay otro enlace de post SO que describe un problema similar. Supongo que la solución en ese post debe resolver su problema.

Creo firmemente que pasar a RecyclerView . Si no quieres moverte. Aquí hay trabajo alrededor. Simplemente agregue este método a su actividad y llámelo.

 private void smoothScrollToTop(final int pos) { listView.smoothScrollToPositionFromTop(pos, 0); listView.post(new Runnable() { @Override public void run() { listView.smoothScrollToPosition(pos); } }); } 

Esto está bien probado. Y trabajó para mí. Y aquí está la salida.

Introduzca aquí la descripción de la imagen

Qué pasa con el método smoothScrollToPosition (posición). Se desplaza hasta la posición sin dejar espacio extra. Cuando me enfrenté smoothScrollToPositionFromTop (posición, desplazamiento) método en cada elemento haga clic en flickrs el listview como resultado espacio se queda. ¡¡¡Espero eso ayude!!!

Prueba esto a tu xml:

 <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="0dp" android:clipToPadding="false"/> 
  • Desplazar RecyclerView para mostrar el elemento seleccionado en la parte superior
  • Android HorizontalScrollView con layout_gravity correcto trabajando mal
  • ¿Cómo obtener el ListView con desplazamiento de carrusel en Android?
  • Restablecer TextView vaya a la parte superior
  • ¿Por qué mi scrollHorizontally no funciona?
  • Desplazamiento de un childscene en AndEngine
  • Vista de cuadrícula de desplazamiento horizontal
  • Los elementos ListView y de altura variable provocan problemas de desplazamiento
  • Cómo desplazarse pantalla en android
  • Horizontal RecyclerView dentro de ListView sin desplazamiento muy suave
  • Infinite Auto Scroll ListView con velocidad de desplazamiento controlada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.