ScrollView中的RecyclerView - ScrollView无法正常工作

时间:2016-05-03 12:41:48

标签: android scrollview

我使用最新的支持设计(compile 'com.android.support:design:+'),23.2应该已经修复了ScrollView中的RecyclerView问题。 RecyclerView和ExpandableListView滚动功能完美无缺。 但是当ExpandableListView太长并且我希望能够向上滚动布局以便我可以看到其余部分时,滚动视图就不起作用了。

片段:

 myRecyclerView = (RecyclerView) view.findViewById(R.id.myRecyclerView);
    myRecyclerView.setNestedScrollingEnabled(false);

    LinearLayoutManager layoutManager = new LinearLayoutManager( mContext, LinearLayoutManager.HORIZONTAL, false );
    layoutManager.setAutoMeasureEnabled(true);
    myRecyclerView.setLayoutManager(layoutManager);

    MyListAdapter myListAdapter = new MyListAdapter(recyclerDataList, getActivity());
    myRecyclerView.setAdapter(myListAdapter);

的xml:

 <ScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:fillViewport="true">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <TextView
                    android:id="@+id/headerText"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="header text"
                    android:layout_marginRight="10dp"/>

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/myRecyclerView"
                    android:layout_below="@id/headerText"
                    android:scrollbars="none"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>


                <ExpandableListView
                    android:id="@+id/expandableList"
                    android:layout_below="@id/myRecyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:divider="1dp"
                    android:dividerHeight="0dp"
                    android:groupIndicator="@null"
                    android:listSelector="@android:color/transparent"
                    android:showDividers="middle" >
                </ExpandableListView>

            </RelativeLayout>
    </ScrollView>

2 个答案:

答案 0 :(得分:0)

你需要在运行时计算listview的高度,不能像这样在滚动视图里面使用listview或expeable listview。

Android list view inside a scroll view

答案 1 :(得分:0)

你应该这样做:

实施RecyclerView的 OnItemTouchListener ,并禁止ACTION_MOVE上的父触摸事件。

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        int action = e.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                 recyclerView.getParent().requestDisallowInterceptTouchEvent(true);
             break;
            case MotionEvent.ACTION_UP:
                 recyclerView.getParent().requestDisallowInterceptTouchEvent(false);
             break;
            case MotionEvent.ACTION_MOVE:
                 recyclerView.getParent().requestDisallowInterceptTouchEvent(true);         
             break;
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
});

希望这会对你有所帮助。