为了账号安全,请及时绑定邮箱和手机立即绑定

滚动视图中的android列表视图

滚动视图中的android列表视图

慕后森 2019-06-06 11:11:18
滚动视图中的android列表视图我有一个Android布局scrollView里面有很多元素。在底部scrollView我有一个listView然后由适配器填充。我遇到的问题是,Android排除了listView从scrollView就像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,我可以滚动在极小的部分,评论是。我想要一个全局页面滚动
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

这个最短最优解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);


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信