Pregunta 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.

He intentado usar un ScrollView con un LinearLayout niño, y poniendo mi ListViews en el LinearView, pero todas las ListViews bloquear 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?


32
2017-11-20 19:55


origen


Respuestas:


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.


6
2018-01-12 09:58



Evento táctil hacia adelante desde touched ver 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<items; list++){
                    AbsListView listView =mLayoutWithListViews.getChildAt(list));
                    if(listView != v){
                         listView.onTouchEvent(newEvent);
                    }
                }
            }
            return false;
        }
    };

11
2018-06-29 14:53



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


6
2018-02-26 13:16



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);
    }
}

3
2017-09-10 18:53



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();

1
2017-09-17 07:25



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


-1
2017-10-04 04:55