如何在SwipeRefreshLayout内部的ExpandableListView中工作,而后者又在CoordinatorLayout内部工作?

时间:2018-07-09 07:14:51

标签: android listview expandablelistview android-coordinatorlayout swiperefreshlayout

包装在RelativeLayout中的WebView(包含vimeo或youtube视频)以及一些TextView将以编程方式添加到 postViewContainer 。有时候,它只是一些TextViews和ImageViews,但在大多数情况下,它具有WebView。

videoFullScreenContainer 在视频放大到全屏模式时使用

eplComments 包含评论列表。每个评论都有一个答复列表。

这里的问题是 postViewContainer 不是可滚动的一部分。甚至 eplComments 也无法正常运行。向上滚动时,它会触发拉动刷新,直到完全向上滚动。

如何使 postViewContainer 成为可滚动的一部分,并使用SwipeRefreshLayout解决滚动冲突?

postViewContainer 不能是 eplComments 的项目,因为如果存在,则只要更新 eplComments 中的项目,网络视图中的视频就会重新加载

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/mainContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:theme="@style/AppTheme.AppBarOverlay">

            ...

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.SwipeRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/swipeRefreshLayout">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <FrameLayout
                    android:id="@+id/postViewContainer"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                </FrameLayout>

                <ExpandableListView
                    android:id="@+id/eplComments"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:dividerHeight="0dp"
                    android:childDivider="@null"
                    android:divider="@null"
                    android:groupIndicator="@null"
                    />

            </LinearLayout>


        </android.support.v4.widget.SwipeRefreshLayout>


    </android.support.design.widget.CoordinatorLayout>

    <FrameLayout
        android:id="@+id/videoFullScreenContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

</RelativeLayout>

已更新: 我还尝试过将SwipeRefreshLayout的内容包装在NestedScrollView中,如下所示。这里的问题是它仅加载ExpandableListView中的第一项。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/mainContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:theme="@style/AppTheme.AppBarOverlay">

            ...

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.SwipeRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/swipeRefreshLayout">

            <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:focusableInTouchMode="true"
                    android:orientation="vertical">

                    <FrameLayout
                        android:id="@+id/postViewContainer"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                    </FrameLayout>

                    <ExpandableListView
                        android:id="@+id/eplComments"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:dividerHeight="0dp"
                        android:childDivider="@null"
                        android:divider="@null"
                        android:groupIndicator="@null"
                        />

                </LinearLayout>

            </android.support.v4.widget.NestedScrollView>


        </android.support.v4.widget.SwipeRefreshLayout>


    </android.support.design.widget.CoordinatorLayout>

    <FrameLayout
        android:id="@+id/videoFullScreenContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

删除postViewContainer及其容器(LinearLayout)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/mainContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:theme="@style/AppTheme.AppBarOverlay">

            ...

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.SwipeRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/swipeRefreshLayout">

            <ExpandableListView
                android:id="@+id/eplComments"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:dividerHeight="0dp"
                android:childDivider="@null"
                android:divider="@null"
                android:groupIndicator="@null"
                />

        </android.support.v4.widget.SwipeRefreshLayout>


    </android.support.design.widget.CoordinatorLayout>

    <FrameLayout
        android:id="@+id/videoFullScreenContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

</RelativeLayout>

将WebView(以及您要以编程方式添加的所有其他视图)作为标头添加到ExpandableListView

mExpandableListView.addHeaderView(view);