Frage

Ich bin auf diesem ein völlig ratlos. Ich habe drei verschiedene Listen, die auf dem Bildschirm angezeigt werden müssen. Es ist durchaus möglich, dass die Listen über den unteren Rand des Bildschirms verlängern, also würde ich eine Rolle benötigen.

Ich habe versucht, eine ScrollView mit einem LinearLayout Kind mit und setze meine ListViews im LinearView, aber alle der ListViews Sperre auf eine feste Höhe mit Bildlaufleisten. Die Verwendung anderer Arten von Layouts bedeutet kein Scrollen.

Hat jemand irgendwelche Vorschläge haben, oder muss ich programmatisch die Listenelemente zu einem gewissen Layout und das Beste hoffen hinzufügen?

War es hilfreich?

Lösung

Ich habe dies noch nicht getan, aber ich habe darüber nachgedacht, da ich es wohl tun müssen. Ich kann mich drei Optionen: nur eine Liste mit dem Inhalt aller Listen verwenden. Sie können eine ListAdapter machen, die das tut, und fügt eine Art von Kopf. Dies könnte wohl sein, etwas sehr wiederverwendbar ist.

Die andere Idee ist es, eine Liste von Listen zu machen. Aber das klingt nach Ärger bringen.

Andere Tipps

Weiterleiten Berührungsereignis aus touched Blick auf andere Ansichten. Alle Ihre Ansichten werden synchronisiert erweitern / kollabiert zu.

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

Ich hatte ein ähnliches Problem, außer daß ich hatte zwei Gridviews und ein Listview zu blättern. Ich löste es, indem manuell die Höhe des Listviews und Grid Einstellung:

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

Hoffnung, ich könnte jemand helfen.

Obwohl diese Antwort für Scroll-Ansicht der anstelle der Listenansicht des, das Problem ist das gleiche, und diese Lösung gut für mich gearbeitet. die linke Scrollview Scrollen wird das Recht Scrollview und umgekehrt bewegen.

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

Mit erweiterbar Listview. Chk meine Antwort für eine ähnliche Frage hier: Android Scroll Layout Problem

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top