ListView in einem ScrollView

Mögliche Duplikat:
Listview inside ScrollView scrollt nicht auf Android

Ich habe eine ListView in einem ScrollView und das Problem ist, dass die ScrollView scrolling aber ListView nicht scrollen. Ich denke, das geschieht wegen dieser ScrollView . Hat jemand eine Lösung für dieses Problem?

  • Fehler: Ihre CPU unterstützt keine erforderlichen Funktionen (vt-x oder svm)
  • Handle Screen Rotation ohne Datenverlust - Android
  • Wie bekomme ich Facebook Foto, voller Name, Geschlecht mit Facebook SDK Android
  • Implementieren Sie Erweiterung und Zusammenbruch Benachrichtigung Android
  • Android Studio 6.0 Fusion fehlgeschlagen
  • Android-App erhielt keine Daten vom SignalR-Hub
  • Wie man eine Verbindung zu localhost von VS Android Emulator herstellt
  • Android Studio 0.5.2 SVN CheckOut funktioniert nicht
  • Neun-Patch-Bilder für Web-Entwicklung
  • MapActivity kann nicht auf einen Typ aufgelöst werden
  • Wie konvertiert man DP, PX, SP untereinander, besonders DP und SP?
  • Gute Beispiele für Non-Game-Marmalade-Apps?
  • 4 Solutions collect form web for “ListView in einem ScrollView”

    ListView s verfügen über integrierte Scroll-Funktionen. Encapsulate es in irgendeinem anderen Layout wie ein LinearLayout oder RelativeLayout .

    Ich brauchte eine Listenansicht in einer Scrollview, um zu verhindern, dass der gesamte Bildschirm extrem lang ist. Damit können Sie die Anzahl der auf der Liste angezeigten Elemente einstellen, während der Rest gescrollt wird.

    Ich benutze die folgende Klasse in meiner App und so weit scheint es, schrecklich zu arbeiten.

      public class NestedListView extends ListView implements OnScrollListener, OnTouchListener { private int listViewTouchAction; private static final int MAXIMUM_LIST_ITEMS_VIEWABLE = 4; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (getAdapter() != null && getAdapter().getCount() > MAXIMUM_LIST_ITEMS_VIEWABLE) { if (listViewTouchAction == MotionEvent.ACTION_MOVE) { scrollBy(0, -1); } } } public NestedListView(Context context, AttributeSet attrs) { super(context, attrs); listViewTouchAction = -1; setOnScrollListener(this); setOnTouchListener(this); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int newHeight = 0; final int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (heightMode != MeasureSpec.EXACTLY) { ListAdapter listAdapter = getAdapter(); if (listAdapter != null && !listAdapter.isEmpty()) { int listPosition = 0; for (listPosition = 0; listPosition < listAdapter.getCount() && listPosition < MAXIMUM_LIST_ITEMS_VIEWABLE; listPosition++) { View listItem = listAdapter.getView(listPosition, null, this); listItem.measure(widthMeasureSpec, heightMeasureSpec); newHeight += listItem.getMeasuredHeight(); } newHeight += getDividerHeight() * listPosition; } if ((heightMode == MeasureSpec.AT_MOST) && (newHeight > heightSize)) { if (newHeight > heightSize) { newHeight = heightSize; } } } else { newHeight = getMeasuredHeight(); } setMeasuredDimension(getMeasuredWidth(), newHeight); } @Override public boolean onTouch(View v, MotionEvent event) { listViewTouchAction = event.getAction(); if (getAdapter() != null && getAdapter().getCount() > MAXIMUM_LIST_ITEMS_VIEWABLE) { if (listViewTouchAction == MotionEvent.ACTION_MOVE) { scrollBy(0, 1); } } return false; } } 

    Verwenden Sie die folgende Methode und genießen Sie!

      private void setListViewScrollable(final ListView list) { list.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { listViewTouchAction = event.getAction(); if (listViewTouchAction == MotionEvent.ACTION_MOVE) { list.scrollBy(0, 1); } return false; } }); list.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (listViewTouchAction == MotionEvent.ACTION_MOVE) { list.scrollBy(0, -1); } } }); } 

    ListViewTouchAction ist ein globaler Integer-Wert. Wenn Sie die Linie ersetzen können

     list.scrollBy(0, 1); 

    Mit etwas anderes bitte teilen sie mit uns.

    Du sollst kein ListView in einem ScrollView verschachteln.

    Wenn Sie versuchen, einige andere Ansichten zusammen mit dem ListView zu scrollen, können Sie diese Antwort überprüfen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.