我想在我的应用程序中刷卡到刷新功能,但我遇到了一个问题:只需为它添加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>
答案 0 :(得分:0)
嗯,这只花了我一整天,但我想通了......我不太了解XML逻辑,但过了一段时间我意识到该怎么做。我的解决方案是不将SwipeRefreshLayout放在CoordinatorLayout中,反之亦然 - 将CoordinatorLayout放在SwipeRefreshLayout中,将SwipeRefreshLayout放在该xml文件层次结构的顶部。
答案 1 :(得分:0)
您的问题是,SwipeRefreshLayout必须是视图的父级,并且应该只有一个子级,您可以在Android开发人员文档中看到:
此布局应作为视图的父级,将作为手势的结果进行刷新,并且只能支持一个直接子级。
https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html
当您更改布局时,此规则不再被破坏。