4

私は異なるフラグメントを持つ通常の NavigationDrawer を持っています:

  • ニュース
  • その他のもの 1
  • その他のもの 2
  • 設定

問題 :

NewsFragment には SwipeRefreshLayout が含まれています。初めてリフレッシュするときはうまく機能します。

フラグメントを他の Stuff 1 と 2 と Setting に変更できます。というわけで、NewsFragment に戻ります。

そして今、リフレッシュすると、フラグメントがフリーズします。

drawerLayout は正しく動作します (開閉、ActionBar タイトルの変更も) が、メイン フラグメントは NewsFragment のままで、スクロールできません。しかし、scollListner は機能します (ログがあります) が、ビューは変わりません。

refreshView なし (swipeRefreshLayout の上部)、スクロールなし、応答ボタン (フォーカス時、オンクリック時) はありませんが、視覚的にのみです。

実際には、レスポンディング フラグメントがフリーズ フラグメントの後ろにあるようなものです。

また、 ADBLog に次のエラーがあります。

SwipeRefreshLayout﹕ Got ACTION_MOVE event but don't have an active pointer id.

何か案が ??

ご要望があれば、コードを投稿できます。

4

3 に答える 3

11

私は解決策を見つけました。誰にでも起こりうることであり、少し退屈なので投稿します (私にとっては 2 日かかります)。

最初に、SwipeRefreshLayout (フラグメント) を含む XML にこれを含めました。

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/news_container_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:background="@color/news_background">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/news_list_recycle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:dividerHeight="5dp" />


    <ProgressBar
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/news_progress"
        android:visibility="invisible"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />


</RelativeLayout>

したがって、バグを修正するには、 SWIPEREFRESHLAYOUT に RECYCLEVIEW (またはリストビュー) を含める必要があります。

そこで、progressBar を移動し、RelativeLayout を rootView にします。

結果 :

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

<ProgressBar
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/news_progress"
    android:visibility="invisible"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/news_container_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:background="@color/news_background">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/news_list_recycle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:dividerHeight="5dp" />

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

後で他の誰かに役立つことを願っています。

于 2014-11-18T10:21:50.013 に答える
0

この答えは私にとってはうまくいきました。onPause() で更新レイアウトをクリアすることです。

于 2015-03-25T12:27:12.617 に答える
-1

あなたのコード例は実際に問題を解決します。これは v21 サポート ライブラリの問題のようです。

これに遭遇する可能性のある他の人を助けるためにもう少し明確にするために、問題SwipeRefreshLayoutはルートビューであることがもはや幸せではないようです。

RelativeLayoutに. SwipeRefreshLayout_ ListView/RecyclerView_ SwipeRefreshLayout私は試していませんが、aLinearLayoutまたは other でも問題が解決すると思います。

したがって、修正は次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
        <android.support.v4.widget.SwipeRefreshLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent">
                    <!-- List, Layout etc -->
        </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
于 2014-11-26T12:37:49.103 に答える