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?

  • Kann manche Zeilen nicht erreichen, die die Android-App debuggen
  • Warten Sie, bis mehrere AsyncTask abgeschlossen ist
  • Aktivitätsmethoden: onCreate () und onDestroy ()
  • OnUp-Event auf GestureDetector
  • Was sind Orientierungskonstanten für Ansichten?
  • Wie macht man Annotation wie Hervorhebung, Durchgestoßenheit, Unterstreichung, Zeichnen, Hinzufügen von Text, etc in android für einen PDF-Viewer?
  • Installieren von ADB auf MAC OS X
  • Wie benutze ich OAuth 2.0, um Gmail von Indy zu senden?
  • Gradle (android experimental plugin) ignoriert eine Projektabhängigkeit
  • SeekBar verwenden, um Volume in Android zu kontrollieren?
  • Benutzerdefiniertes Widget mit LinearLayout nicht immer onDraw ()
  • Android - Wo ist SQLite Datenbank gespeichert
  • 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.