Desplazarse con Multiple ListViews para Android

Estoy completamente perplejo en este caso. Tengo tres listas diferentes que deben mostrarse en la pantalla. Es completamente posible que las listas se extiendan más allá del borde inferior de la pantalla, así que necesitaría desplazarse.

Intenté usar ScrollView con un LinearLayout secundario LinearLayout y colocar ListViews en LinearView , pero todas las ListViews bloquean a una altura fija con barras de desplazamiento. Usar otros tipos de diseños significa no desplazarse.

¿Alguien tiene alguna sugerencia o tendré que agregar los elementos de la lista programáticamente a algún diseño y esperar lo mejor?

No he hecho esto todavía, pero he estado pensando en eso ya que probablemente necesite hacerlo. Puedo pensar en tres opciones: usar solo una lista con el contenido de todas las listas. Puede hacer un ListAdapter que lo haga e inserte algún tipo de encabezado. Esto probablemente podría ser algo muy reutilizable.

La otra idea es hacer una lista de listas. Pero eso suena como pedir problemas.

Reenviar evento táctil desde la vista touched a otras vistas. Todas sus vistas se sincronizarán expandir / colapsar también.

  OnTouchListener mOnTouch = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { MotionEvent newEvent = MotionEvent.obtain(event); switch(event.getAction()){ case MotionEvent.ACTION_MOVE: if(mTouched == null){ mTouched = v; } mMovingFlag = true; break; case MotionEvent.ACTION_UP: if(mMovingFlag==false){ newEvent.setAction(MotionEvent.ACTION_CANCEL); } mMovingFlag = false; break; default: mMovingFlag = false; if(mTouched != null && mTouched.equals(v)){ mTouched = null; } break; } if(mTouched == null || mTouched.equals(v)){ int items = mLayoutWithListViews.getChildCount(); for(int list=0; list 

Tuve un problema similar, salvo que tenía dos GridViews y un ListView para desplazarse. Lo resolví configurando manualmente el alto de ListViews y GridView:

  ListAdapter listAdapter = listView.getAdapter(); int rows = listAdapter.getCount() / columns; int height = 60 * rows; // Insert the general cell height plus the dividers. ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = height; listView.setLayoutParams(params); listView.requestLayout(); 

Espero poder ayudar a alguien

Aunque esta respuesta es para la vista de desplazamiento en lugar de la vista de lista, el problema es el mismo y esta solución funcionó bien para mí. Al desplazarse por la vista de desplazamiento izquierda, se desplazará la vista de desplazamiento hacia la derecha y viceversa.

  public class MainActivity extends Activity implements OnTouchListener { private ScrollView scrollViewLeft; private ScrollView scrollViewRight; private static String LOG_TAG = MainActivity.class.getName(); private boolean requestedFocus = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); scrollViewLeft = (ScrollView) findViewById(R.id.scrollview_left); scrollViewRight = (ScrollView) findViewById(R.id.scrollview_right); scrollViewLeft.setOnTouchListener(this); scrollViewRight.setOnTouchListener(this); scrollViewLeft.setFocusableInTouchMode(true); scrollViewRight.setFocusableInTouchMode(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onTouch(View view, MotionEvent motionEvent) { Log.d(LOG_TAG, "--> View, event: " + view.getId() + ", " + motionEvent.getAction() + ", " + view.isFocused()); Log.d(LOG_TAG, "--> " + scrollViewLeft.isFocused() + ", " + scrollViewRight.isFocused()); if (motionEvent.getAction() == MotionEvent.ACTION_DOWN && requestedFocus == false){ view.requestFocus(); requestedFocus = true; }else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ requestedFocus = false; } if (view.getId() == R.id.scrollview_left && view.isFocused()){ scrollViewRight.dispatchTouchEvent(motionEvent); }else if (view.getId() == R.id.scrollview_right && view.isFocused()){ scrollViewLeft.dispatchTouchEvent(motionEvent); } return super.onTouchEvent(motionEvent); } } 
 ListAdapter listAdapter = listView.getAdapter(); int rows = listAdapter.getCount() / columns; int height = 60 * rows; // Insert the general cell height plus the dividers. ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = height; listView.setLayoutParams(params); listView.requestLayout(); 

Use ListView expandible. Chk mi respuesta para una pregunta similar aquí: problema de diseño Android ScrollView