我正在尝试使用Chris Banes的图书馆Actionbar-PullToRefresh。它可以找到here。
我在我的应用中使用了Tabs + ViewPager + Fragments。
我遇到的问题是我的片段有一个GridView
,我无法弄清楚如何使用这个库来处理它。
我仔细阅读了示例代码。他说你需要做的就是将你的可刷新视图包裹在这样的PullToRefreshLayout
中:
<uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ptr_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Your content, here we're using a ScrollView -->
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ScrollView>
</uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout>
这适用于ListView
,ScrollView
,GridView
等内容。但是,显然这对Fragments(Tabs&amp; ViewPagers)不起作用。现在,在示例代码中,他使用ScrollView
的{{1}} INSTEAD 包装了可刷新片段。
我不能这样做,因为我的片段1(在标签1下面)有一个PullToRefreshLayout
。现在我无法将GridView
添加到GridView
,因为这没有意义。
例如,如果我将ScrollView
放在GridView
内,如下所示,那就没有意义了:
ScrollView
以上代码有效。有点。 (我需要禁用我的GridView的滚动并使用ExpandableGridView来使其正常工作......这看起来有点过分而且我甚至不确定这是否会起作用)。
如果我用<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ptr_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbarStyle="outsideInset" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFF000" >
<!-- MY GRID VIEW -->
<GridView
...
/>
</RelativeLayout>
</ScrollView>
或任何其他布局替换ScrollView
包装器,则刷新不起作用。
怎么办?如何让我的布局与这个库一起工作而不包围PullToRefreshLayout
?
我希望我足够清楚。如果您需要更多信息,请与我们联系。我尽力解释它。
谢谢!
答案 0 :(得分:3)
我有一个类似的问题,试图让它与我在其中一个标签中的ListView一起使用。
我通过使用PullToRefreshAttacher而不是使用布局解决了我的问题。
在控制片段的ViewPager的Activity中,在onCreate或init方法中初始化PullToRefreshAttacher。
mPullToRefreshAttacher = PullToRefreshAttacher.get(this);
接下来制作一个公共方法,允许访问刚刚初始化的attacher。
public PullToRefreshAttacher getPullToRefreshAttacher() {
return mPullToRefreshAttacher;
}
然后在片段中你想要刷新功能。
mPullToRefreshAttacher = ((MainTabActivity) getActivity())
.getPullToRefreshAttacher();
mPullToRefreshAttacher.addRefreshableView(activeListView, this);
除非在您的情况下,activeListView将引用您的GridView而不是ListView。
然后确保您的片段实现了OnRefreshListener,以便您可以处理Refresh。
我实际上没有使用GridView对此进行测试,所以请告诉我它是否有效。
祝你好运!