使用match_parent在NestedScrollView中进行RecycleView

时间:2016-03-18 12:35:43

标签: android android-recyclerview

我有一个可以关闭自定义ScrollView的布局。有一些片段加载到此RecycleView中。

今天我向新片段添加了RecycleView并发现了一个奇怪的行为。当android:height="match_parent"<xxx.SwitchableScrollView android:id="@+id/main_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:id="@+id/fragment_holder" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:ignore="ScrollViewSize"/> </xxx.SwitchableScrollView> 时,它会在ScrollView中扩展到其高度。

有没有办法禁用它(我希望RecycleView在内部滚动并成为screen_height大小)?

主要内容xml(位于CoordinatorLayout内)

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/appeals_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="visible"/>

    <LinearLayout
        android:id="@+id/loading_progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <ProgressBar
            android:layout_width="@dimen/big_progress_diameter"
            android:layout_height="@dimen/big_progress_diameter"
            android:indeterminate="true"
            android:indeterminateDrawable="@drawable/custom_progress_bar_primary"/>
    </LinearLayout>
</FrameLayout>

片段布局:

public class SwitchableScrollView extends ScrollView {
    boolean allowScroll = true;

    public boolean isAllowScroll() {
        return allowScroll;
    }

    public void setAllowScroll(boolean allowScroll) {
        this.allowScroll = allowScroll;
    }

    // .... constructors skipped

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return allowScroll && super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return allowScroll && super.onInterceptTouchEvent(ev);
    }
}

扩展ScrollView:

listView = (NestedRecyclerView) v.findViewById(R.id.appeals_list);
listView.setHorizontalScrollBarEnabled(false);
listView.setVerticalScrollBarEnabled(true);
listView.setNestedScrollingEnabled(true);
adapter = new AppealListAdapter(appealList);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
listView.setLayoutManager(layoutManager);
listView.setAdapter(adapter);

new GetAppeals().execute();

RecycleView init:

movieclip

我正在使用支持库23.2.1(也尝试过23.2.0)。 ListView和GridView在另一个片段中运行良好。

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。我花了6个小时(!)将这一行添加到代码中:

layoutManager.setAutoMeasureEnabled(false);

他们应该疯狂地默认启用这样的东西......