我找到了解决这个问题的方法,但它并不完美,所以我不会接受这个,以防出现更好的情况。
因为在返回我的 Fragment 时onResume()
被调用(这个答案也非常特定于我的项目),我只是做了以下事情:
@Override
public void onResume(){
super.onResume();
// Make the adapter again
adapter = new FeedListAdapter(this, feed);
// Set it to the list again
list.setAdapter(adapter);
}
这刷新了列表(很糟糕)并且仍然相当明显,尽管如果我使用按钮而不是 PullToRefresh 它不是。
我的解决方案(无论多么糟糕)与 PullToRefresh 一起将其粘贴在具有延迟触发器的处理程序中,以让下拉的“刷新”部分在它运行之前消失。
@Override
public void onResume(){
super.onResume();
new Handler().postDelayed(new Runnable() {
public void run() {
adapter = new FeedListAdapter(this, feed);
list.setAdapter(adapter);
}
}, 500);
}
同样,这对我的项目来说非常具体,而且是一种非常奇怪的做法,所以请分享任何“完美”的答案:)
编辑: PullToRefresh 仍然存在一个问题,所以我的解决方案是在一个新线程中等待,直到 PullToRefresh 再次被隐藏,然后重建列表(它很混乱,但无论如何它都可以工作):
@Override
public void onResume(){
super.onResume();
// Start a new thread
new Thread(new Runnable() {
@Override
public void run() {
try {
// Wait until the PullToRefresh is hidden
synchronized(this){
wait(190);
}
} catch(InterruptedException ex) { }
// Post a new runnable
threadHandler.post(new Runnable(){
public void run(){
// Recreate the adapter from the new feed
adapter = new FeedListAdapter(FeedListActivity.this, feed);
// Set the recreated adapter
list.setAdapter(adapter);
}
});
}
}).start();
}
}
编辑2:
只是注意到我错过了一些明显的东西。我刚刚list.onRefreshComplete();
将 PullToRefresh 视图更改为我的,onResume()
并且处理了跳跃性。不过,我认为上述解决方案更令人印象深刻:p
所以我的代码:
@Override
public void onResume(){
super.onResume();
// Recreate the adapter from the new feed
adapter = new FeedListAdapter(this, feed);
// Set the recreated adapter
list.setAdapter(adapter);
// The list has finished refreshing
list.onRefreshComplete();
}