2016-10-29 19 views
0

タブ付きビューにSwipeRefrshLayoutを適用しようとしています。後タブ付きビューのSwipeRefreshLayout

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 

} 
@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
    if (SuperAwesomeCardFragment.listAchievements.getChildAt(0) != null) { 
     StudentInfoMainActivity.swipeRefreshLayout.setEnabled(listAchievements.getFirstVisiblePosition() == 0 && listAchievements.getChildAt(0).getTop() == 0); 
    } 

} 

これは、私はこれがフラグメントファイル内

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <android.support.design.widget.AppBarLayout 
      android:id="@+id/appbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      <android.support.v7.widget.Toolbar 
       android:id="@+id/action_bar" 
       style="@style/Widget.MaterialSheetFab.ToolBar" /> 
      <com.astuetz.PagerSlidingTabStrip 
       android:id="@+id/tabs" 
       style="@style/Widget.MaterialSheetFab.TabLayout" /> 
     </android.support.design.widget.AppBarLayout> 
     <android.support.v4.widget.SwipeRefreshLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/swiperefresh" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:layout_below="@+id/appbar" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
     </android.support.v4.widget.SwipeRefreshLayout> 
    </LinearLayout> 
</RelativeLayout> 

コード活動のレイアウトファイルであるswipeRefreshLayout

<?xml version="1.0" encoding="utf-8"?> 
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true"> 

      <ListView 
       android:id="@+id/list" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent" 
       android:divider="@null" /> 

    </ScrollView> 

先のタブフラグメントのレイアウトファイルがあります上記のレイアウトとコードサンプルをGoogleのサンプルコードに示すように適用すると、私は成功しましたswiperefreshllayoutを完全に実装することができます。しかし、スワイプがそれを上書きしていたので、スクロールできないという問題がありました。スタックオーバーフローのスレッドごとに、https://stackoverflow.com/a/35779571/4180170、私は私の問題を解決するコードを追加しました。しかしそれはもう一つの問題を追加しました。 リストの最初の行の高さが画面サイズより大きい場合、リストには最初の要素のみが表示されます。他の要素は画面に表示されません。これは、行の最初の要素が大きい場合にのみ発生します。画面サイズ以下の高さの行をもう1つ追加すると、すべての要素が正しく表示されます。

私が強調したい点は、(TabsやFragmentsの代わりに)アクティビティで同様のコードを使用すると、予想通り完全に動作し、次の問題が発生しないということです。 これは奇妙なものです。 は画像1:この画像では、リストビュー内の最初の要素はリストビューで、ので、すべての要素を画面の高さよりも低い高さを有している

Image 1

Image 2

私は2枚の画像を追加しました上下にスクロールすると表示されます。

Image2:ここでは、画像1からリストビューの最初の要素を削除しました。この写真は、リストビューの最初の要素です。この場合、イメージに見られるように、要素の高さ(Image + paddingおよびall)は画面サイズ(height)よりも大きくなります。今、私がスクロールしようとすると、スクロールは画像がいっぱいに見えるようになるまでです。下にスクロールすると、私はリストビュー内の他の行を見ることができません。

更新:それは他の誰かを助けることができるよう Logcatに次の行を取得する複数回

10-30 08:56:02.851 19665-19665/com.malav.holistree E/SwipeRefreshLayout: Got ACTION_MOVE event but don't have an active pointer id. 
+0

スクリーンショットを投稿して問題を詳しく説明できますか?私はあなたの問題を正しく理解することができませんでした。 – jonathanrz

+0

私はスクリーンショットを追加し、スクリーンショットに関連する説明をいくつか追加しました –

+1

ニース、問題はより明確になりました。質問:ScrollView内でListViewが必要なのはなぜですか?また、ListViewからRecyclerViewに変更することをお勧めします。RecyclerViewは、ListViewよりも複数のスクロール表示でよりうまく処理します。 – jonathanrz

答えて

0

投稿答え。 ScrollViewを使用して実際に問題が発生していました。 @jonathanrzの説明に従って、RecyclerViewでLinearlayoutを使用しました。 うまく動作します。

関連する問題