不使用SwipeRefreshLayout时冻结的Android GUI

时间:2017-03-21 12:35:27

标签: android xml user-interface swiperefreshlayout frozen

我想在我的应用程序中刷卡到刷新功能,但我遇到了一个问题:只需为它添加XML就会破坏GUI。在应用程序被刷卡的那一刻,我仍然可以使用GUI,但是当它停止或我回到特定页面时它会再次中断。这是活动XML,我在其中添加了SwipeRefreshLayout标记,该标记打破了应用程序:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
tools:context="com.something.myapp.UserListActivity">

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

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

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

<FrameLayout
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <include layout="@layout/user_list" />
</FrameLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    app:srcCompat="@android:drawable/ic_dialog_email" />

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/activity_main_swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/user_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

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

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

2 个答案:

答案 0 :(得分:0)

嗯,这只花了我一整天,但我想通了......我不太了解XML逻辑,但过了一段时间我意识到该怎么做。我的解决方案是不将SwipeRefreshLayout放在CoordinatorLayout中,反之亦然 - 将CoordinatorLayout放在SwipeRefreshLayout中,将SwipeRefreshLayout放在该xml文件层次结构的顶部。

答案 1 :(得分:0)

您的问题是,SwipeRefreshLayout必须是视图的父级,并且应该只有一个子级,您可以在Android开发人员文档中看到:

此布局应作为视图的父级,将作为手势的结果进行刷新,并且只能支持一个直接子级。

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html

当您更改布局时,此规则不再被破坏。