2014-07-08 12 views
5

Ich möchte ein Fragment, das 2 ListView hat. Ich möchte nicht, dass die ListView stattdessen scrollt, ich möchte nur das ganze Fragment scrollen. Heres der Code:Wie mache ich ein Fragment scrollbar mit einem ListView

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff" > 

    <TextView 
     android:id="@+id/day" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:gravity="center_horizontal" 
     android:paddingTop="15dp" 
     android:text="Monday" 
     android:textColor="#000" 
     android:textSize="55sp" /> 

    <TextView 
     android:id="@+id/date" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/day" 
     android:gravity="center_horizontal" 
     android:text="27 April, 2014" 
     android:textColor="#000" 
     android:textSize="45sp" /> 

    <ListView 
     android:id="@+id/home_list_time" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/date" 
     android:layout_margin="10dp" 
     android:background="@color/list_home_time_bg" 
     android:divider="@android:color/white" 
     android:dividerHeight="20.0sp" /> 

    <ListView 
     android:id="@+id/home_list_stime" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/home_list_time" 
     android:layout_margin="10dp" 
     android:background="@color/list_home_stime_bg" 
     android:divider="@android:color/white" 
     android:dividerHeight="20.0sp" /> 

    </RelativeLayout> 

Wenn ich diesen Code ausführen, die zweite Listview erhält eine eigene Bildlaufleiste gibt es eine Möglichkeit, dies zu stoppen und das gesamte Fragment zu bewegen zu machen?

+0

Ich denke, es ist eine schlechte Idee, aber haben Sie versucht, das RelativeLayout in einem ScrollView zu wickeln? Ich denke, du wirst ein seltsames Scroll-Verhalten sehen und/oder die Höhe der Listenansichten ist möglicherweise nicht das, was du erwartest. Dies ist darauf zurückzuführen, dass die Scrollansicht bei der Messung einer unbestückten Listenansicht etwas aggressiv ist. – Delblanco

Antwort

10

die Listview Scrollen verwenden, um zu stoppen -

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <!-- everything you already have --> 
</ScrollView> 

Weitere Check - - how-to-get-a-non-scrollable-listview

listView.setScrollContainer(false); 

Fragment es innerhalb Scroll blättern setzen.

HINWEIS:

Wenn Sie Listview innerhalb eines Scroll setzen dann alle Listview nicht auf seine volle Höhe dehnt. Unten ist eine Methode, um dieses Problem zu beheben.

/**** Method for Setting the Height of the ListView dynamically. 
**** Hack to fix the issue of not showing all the items of the ListView 
**** when placed inside a ScrollView ****/ 
public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) 
     return; 

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED); 
    int totalHeight = 0; 
    View view = null; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     view = listAdapter.getView(i, view, listView); 
     if (i == 0) 
      view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); 

     view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += view.getMeasuredHeight(); 
    } 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

zur Anwendung dieses Verfahrens nur das Listview innerhalb dieser Methode übergeben:

ListView list1 = (ListView) view.findViewById(R.id.home_list_time); 
setListViewHeightBasedOnChildren(list1); 

ListView list2 = (ListView) view.findViewById(R.id.home_list_stime); 
setListViewHeightBasedOnChildren(list2); 

hier More - android-list-view-inside-a-scroll-view.

+0

Aus irgendeinem Grund zeigt das ListView jetzt nur das erste Element an und wir müssen scrollen, um den Rest zu sehen, und die gesamte Fragmentaktivität füllt nicht die Höhe des mobilen Bildschirms. Ihre Antwort sollte funktionieren, aber ich weiß nicht, was falsch ist ... Warum scrollt das ListView immer noch, wenn wir es auf false setzen? – user2132383

Verwandte Themen