¿Cómo obtener un ListView sin desplazamiento?

Debería desear un ListView no desplazable, y mostrar todo el ListView. Es porque toda mi pantalla es ScrollView, y envío widgets con un RelativeLayout, así que no necesito el rollo ListView.

He establecido mi ui con código, no con xml.

He utilizado listView.setScrollContainer(false) , pero no es trabajo, no entiendo por qué.

Gracias.

No coloque una vista de lista en una vista de desplazamiento, no funciona. Si desea una lista de elementos que no se desplaza, se denomina lineallayout.

La respuesta correcta está aquí.

Sólo tiene que asignar este listener a su ListView :

  listView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { return true; // Indicates that this has been handled by you and will not be forwarded further. } return false; } }); 

Encontré una solución muy simple para esto. Sólo tiene que obtener el adaptador de la lista y calcular su tamaño cuando se muestran todos los elementos. La ventaja es que esta solución también funciona dentro de un ScrollView.

Ejemplo:

 public void justifyListViewHeightBasedOnChildren (ListView listView) { ListAdapter adapter = listView.getAdapter(); if (adapter == null) { return; } ViewGroup vg = listView; int totalHeight = 0; for (int i = 0; i < adapter.getCount(); i++) { View listItem = adapter.getView(i, null, vg); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams par = listView.getLayoutParams(); par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1)); listView.setLayoutParams(par); listView.requestLayout(); } 

Llame a esta función pasando sobre su objeto ListView:

 justifyListViewHeightBasedOnChildren(myListview); 

La función mostrada arriba es una modificación de una entrada en: Deshabilitar desplazamiento en listview

Tenga en cuenta que debe llamar a esta función después de haber configurado el adaptador a la vista de lista. Si el tamaño de las entradas en el adaptador ha cambiado, también debe llamar a esta función.

Dependiendo de lo que está tratando de hacer, es posible que pueda resolver su problema eliminando el ScrollView y utilizando addHeaderView(View) y addFooterView(View) .

Vine con BaseAdapterUnscrollable. Básicamente, sólo agrega vistas al contenedor ViewGroup. La implementación es un poco como BaseAdapter. Es muy conveniente si usas unas cuantas listas no desplazables como eso en tu proyecto.

En onCreate:

  PeopleAdapter peopleAdapter = new PeopleAdapter(this, personList, containerPeopleLinearLayout); peopleAdapter.setOnItemClickListener(this); peopleAdapter.drawItems(); 

Su adaptador específico:

 public class PeopleAdapter extends BaseAdapterNonScrollable<Person> { public PeopleAdapter(Context context, List<Person> items, LinearLayout container) { super(context, items, container); } @Override public View getView(View container, Person person) { TextView textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, null); textView.setText(person.getName()); return textView; } 

}

BaseAdapterNonScrollable (sólo copia):

 public abstract class BaseAdapterNonScrollable<T> implements NonScrollable, OnItemClick { public Context context; private ViewGroup containerViewGroup; private List<T> itemObjectList; private OnItemClick itemClickListener; public BaseAdapterNonScrollable(Context context, List<T> items, ViewGroup containerViewGroup) { this.context = context; this.itemObjectList = items; this.containerViewGroup = containerViewGroup; } @Override public void drawItems() { if (containerViewGroup == null || itemObjectList.size() == 0) { return; } if (containerViewGroup.getChildCount() > 0) { containerViewGroup.removeAllViews(); } //draw all items for (int i = 0; i < itemObjectList.size(); i++) { final int position = i; final View itemView = getView(containerViewGroup, itemObjectList.get(i)); if (itemView != null) { containerViewGroup.addView(itemView); //handle item click event itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (itemClickListener != null) { itemClickListener.onItemClick(itemObjectList, position); } } }); } } } public void setOnItemClickListener(OnItemClick onItemClick) { this.itemClickListener = onItemClick; } public abstract View getView(View container, T itemObject); @Override public void onItemClick(List<?> itemList, int position) { } 

}

Interfaces

 public interface NonScrollable { void drawItems(); } public interface OnItemClick { void onItemClick(List<?> itemList, int position); } 

Para deshabilitar el desplazamiento, puede utilizar listview.setEnabled(false)

Esto también deshabilita selecciones de fila.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.