我正在做一个网络项目,并动态更新信息。关于SwipeRefreshLayout,我有几个问题。
onRefresh()启动后,图标不会停止旋转,即使所有数据都被更新,图标也不会消失。onRefresh()方法,或者在加载数据之前禁用它?下面是我的代码,让每个人都能理解我在说什么:
主线程:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_page);
final SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh);
mSwipeRefreshLayout.setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
na.eraseList();
new NewsParser().execute();
}
});
mSwipeRefreshLayout.setColorScheme(R.color.red);
recList = (RecyclerView) findViewById(R.id.cardList);
recList.setHasFixedSize(true);
na = new NewsAdapter();
recList.setAdapter(na);
new NewsParser().execute();
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
recList.setLayoutManager(llm);AsyncTask
protected Void doInBackground(Void... params) {
try {
doc = Jsoup.connect("http://www.gamedev.net/page/index.html").get();
Element e = doc.getElementById("featured");
Elements es = e.getElementsByClass("article_content_inner");
for (Element el : es) {
Element forHeader = el.getElementsByTag("strong").first().getElementsByTag("a").first();
String URLforImg = el.getElementsByTag("img").first().attr("src");
String forDesc = el.getElementsByClass("article_desc").first().html();
forDesc = new String(forDesc.substring(forDesc.indexOf("</a>") + 7,forDesc.length()));
na.changeList(new NewCard(forHeader.html(), forDesc, URLforImg, forHeader.attr("href")));
runOnUiThread(new Runnable()
{
@Override
public void run() {
na.notifyDataSetChanged();
}
}
);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void params) {
}
}发布于 2015-02-18 11:43:25
在onRefresh()启动后,图标不会停止旋转,即使所有数据都被更新,图标也不会消失。
使用SwipeRefreshLayout.setRefreshing(false)
当我启动我的应用程序时,有一个白色的屏幕(而信息正在加载)。如果我尝试进行刷新,它将工作,但将加载我的数据的两个副本。有没有办法强制使用onRefresh()方法,或者在加载数据之前禁用它? 如何在加载数据之前阻止所有操作?
SwipeRefreshLayout.setEnabled(false)
发布于 2015-02-17 17:01:33
不能在异步任务中使用新线程。先处理掉它。其次,您应该在onPostExecute方法中更新UI,这就是您需要调用na.notifyDataSetChanged();的地方,在使用异步任务更新/完成禁用加载/刷新动画时,还需要调用swipeLayout.setRefreshing(false);。
关于白屏幕--为什么不在填充列表之前放置一个加载旋转器?或者使用旧数据填充列表(您已经在SharedPreferences等中保存或预置了这些数据)。
https://stackoverflow.com/questions/28566707
复制相似问题