【发布时间】:2014-06-13 21:25:05
【问题描述】:
我正在使用这个库:PullToRefresh of Chris Banes
我正在尝试同步方法 setRefreshing()(或 setRefreshing(boolean))以使 ListView 上的视图显示为“正在加载”,但它不起作用。
我也尝试过 setMode(Mode.MANUAL_REFRESHING) 但没有奏效。 当我刷新拉它的工作,是的。
我将它设置在我的 AsyncTask 的 onCreateView() 和 onPreExecute 上,但它都不起作用。
提前致谢。
这就是我声明 PullToRefreshListView 的方式
lv = (PullToRefreshListView) layout.findViewById(R.id.messaggiListView);
lv.setPullToRefreshOverScrollEnabled(false);
lv.setOnRefreshListener(new OnRefreshListener<ListView>(){
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
ChiamataGETMessaggi chiamata = new ChiamataGETMessaggi();
chiamata.execute(WS.anteprime(HomeActivity.auth));
}
});
这就是我在 AsyncTask 上设置刷新方法的方式:
@Override
protected void onPreExecute() {
super.onPreExecute();
lv.setRefreshing();
}
这就是我在我的 XML 中声明它的方式。
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/messaggiListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/ultimoAccessoContainer"
android:layout_below="@+id/rlScrivi"
android:layout_alignParentLeft="true" />
解决方案
我不知道为什么,即使在视图初始化但没有工作之后我也在调用......(我的意思是,onCreateView)。 Dave Morrissey 给了我在 UI 线程上工作的解决方案,但我不知道为什么它不起作用......只是我在我的 AsyncTask 的 onPreExecute() 上实现了这个:
new Thread() {
public void run() {
try {
main.runOnUiThread(new Runnable() {
@Override
public void run() {
lv.setRefreshing(true);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
现在它可以工作了。谢谢。
【问题讨论】:
-
请发布您的片段代码和列表视图的xml位置
-
我不确定,但我想知道从
AsyncTask调用这些方法是否会失败,因为您不在 UI 线程上。您能否尝试在启动AsyncTask时从您的Activity调用这些方法,以便调用发生在UI 线程上? -
嗨@DaveMorrissey,我也试图在onCreateView 上这样做......那不是UI线程吗?因为我已经实现了一个 runOnUiThread() 并且现在它可以工作了……你给了我最后的一点我想说的……你能把它作为答案发布,我把它标记为正确吗?
-
是的,
onCreateView在 UI 线程中,但我猜在那个阶段视图还没有初始化。
标签: android listview pull-to-refresh