滚动视图中的android列表视图

滚动视图中的android列表视图

我有一个Android布局scrollView里面有很多元素。在底部scrollView我有一个listView然后由适配器填充。

我遇到的问题是,Android排除了listViewscrollView就像scrollView已经有可滚动的功能了。我想要listView只要内容是可滚动的,主滚动视图就可以滚动。

我怎样才能做到这种行为?

这是我的主要布局:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"
    android:fillViewport="true"
    android:gravity="top" >

    <LinearLayout
        android:id="@+id/foodItemActvity_linearLayout_fragments"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout></ScrollView>

然后以编程方式使用id将组件添加到线性层:foodItemActvity_linearLayout_fragments..下面是加载到线性布局中的视图之一。这是给我带来麻烦的卷轴。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
       android:id="@+id/fragment_dds_review_textView_label"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Reviews:"
       android:textAppearance="?android:attr/textAppearanceMedium" />

   <ListView
       android:id="@+id/fragment_dds_review_listView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
   </ListView></LinearLayout>

然后,我的适配器将填充此列表视图。

下面是Android层次结构查看器的图像,当我单击主滚动视图时:


如您所见,它排除了审阅列表视图。

我应该能够滚动该页向下看到8个评论,但它只显示给我那3,我可以滚动在极小的部分,评论是。我想要一个全局页面滚动


慕后森
浏览 577回答 3
3回答

阿波罗的战车

这个最短最优解为ScrollView中的ListView问题。你不必做任何特别的事layout.xml文件或处理父ScrollView上的任何内容。您只需处理子ListView. 您还可以使用此代码在ScrollView中使用任意类型的子视图&执行Touch操作。只需在java类中添加以下代码行:ListView lv = (ListView) findViewById(R.id.layout_lv);lv.setOnTouchListener(new OnTouchListener() {     // Setting on Touch Listener for handling the touch inside ScrollView     @Override     public boolean onTouch(View v, MotionEvent event) {     // Disallow the touch request for parent scroll on touch of child view     v.getParent().requestDisallowInterceptTouchEvent(true);     return false;     }});如果你把ScrollView中的ListView然后ListView没有伸展到它的全部高度..下面是解决此问题的方法。/**** 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:ListView list = (ListView) view.findViewById(R.id.ls);setListViewHeightBasedOnChildren(list);用于与ExpanableListView一起使用-信贷本尼ExpandableListView: view = listAdapter.getView(0, view, listView);int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec (ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.EXACTLY);int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec (ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY);view.measure(widthMeasureSpec, heightMeasureSpec);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android