不能在listView中上去因为SwipeRefreshLayout

时间:2015-08-16 01:23:45

标签: android android-layout listview android-listview

任何人都可以帮我吗?

我在一个RelativeLayout中有一个listView,它是SwipeRefreshLayout的子节点。这就是一个片段的视图。

这是一张布局的图片,当我在ListView的底部时拍摄这个截图,所以当我尝试上去的时候我也加载了SwipeRefresh,而且很难进入ListView的顶部。

我尝试过在RelativeLayout之前和SwipeRefreshLayout之后包含ScrollView并成功完成的事情。滚动效果很好,但只有当我将listView扩展到2400 dp并且我没有获得良好的视图时才能正常工作。我在ListView的底部有一些空虚,这不是我想要的。

所以如果有人有任何建议,我可以告诉我。

这是xml代码:

    <?xml version="1.0" encoding="utf-8"?>
<!-- This is the fragment  to be displayed for a section associated with a tab -->
<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipe_refresh_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/layout_round_rect_shape" >

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="@color/list_divider"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/lista_preporuka_selector" >        
        </ListView>

    </RelativeLayout>   

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

enter image description here

2 个答案:

答案 0 :(得分:2)

我使用解释here的解决方案以编程方式解决了这个问题。

基本上,您覆盖列表视图的滚动侦听器,并且只有在滚动位于列表顶部时才启用滑动刷新:

listView.setOnScrollListener(new AbsListView.OnScrollListener() {  
  @Override
  public void onScrollStateChanged(AbsListView view, int scrollState) {

  }

  @Override
  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    int topRowVerticalPosition = (listView== null || listView.getChildCount() == 0) ? 0 : listView.getChildAt(0).getTop();
    swipeContainer.setEnabled(firstVisibleItem == 0 && topRowVerticalPosition >= 0);

  }
});

答案 1 :(得分:0)

刷卡刷新的设计不包含在其中的列表以外的任何内容。 如果您必须以这种方式使用它,请禁用刷新,直到您的列表达到顶部,但我不确定这是否有效。