android - SwipeRefreshLayout 没有停止刷新
问题描述
onCreateView
片段的内部方法:
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
我的refresh()
方法是这样的:
public void {
//some action
swipeRefreshLayout.setRefreshing(false);
}
但有时swipeRefresLayout
是不会停止刷新。当我调试代码时,它甚至没有refresh()
方法。
我该如何解决?
编辑: 更清晰的代码在这里:
public class VisaCardsFragment extends Fragment {
@Bind(R.id.swipe_refresh_layout)
SwipeRefreshLayout swipeRefreshLayout;
@Bind(R.id.recycler_view_visa_cards)
RecyclerView recyclerViewVisaCards;
@Bind(R.id.text_view_message)
TextView textViewMessage;
private List<Card> cards;
private List<VisaCard> visaCards;
private VisaCardsAdapter adapter;
public VisaCardsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_visa_cards, container, false);
setHasOptionsMenu(true);
ButterKnife.bind(this, view);
visaCards = new ArrayList<>();
adapter = new VisaCardsAdapter(visaCards);
recyclerViewVisaCards.setAdapter(adapter);
recyclerViewVisaCards.setHorizontalScrollBarEnabled(true);
recyclerViewVisaCards.setLayoutManager(new LinearLayoutManager(VisaCardsFragment.this.getActivity(), LinearLayoutManager.VERTICAL, false));
cards = Card.getActiveCards();
if (cards.isEmpty()) {
showMessage("Cards unavailable");
return view;
}
swipeRefreshLayout.setRefreshing(true);
getVisaResponse(); // method containing server request (RESTful) to get visa cards (VisaCard) using the data of cards (Card)
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
return view;
}
public void refresh() {
hideMessage();
cards = Card.getActiveCards();
if (cards.isEmpty()) {
clearList();
swipeRefreshLayout.setRefreshing(false);
showMessage("Visa cards not found");
return;
}
getVisaResponse();// method containing server request (RESTful) to get visa cards (VisaCard) using the data of cards (Card)
}
public void showMessage(String message) {
textViewMessage.setText(message);
textViewMessage.setVisibility(View.VISIBLE);
}
public void hideMessage() {
textViewMessage.setText("");
textViewMessage.setVisibility(View.GONE);
}
}
解决方案
我想回答我自己的问题,以便有人会找到解决方案,如果他/她犯了同样的错误。
我的问题是有时swipeRefresLayout
不会停止刷新。当我调试代码时,它甚至没有refresh()
方法。如您所见,并非总是如此。
好的,什么时候发生的?事情发生了,cards
清单是空的。
...
cards = Card.getActiveCards();
if (cards.isEmpty()) {
showMessage("Cards unavailable");
return view;
}
//some code here
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
...
正如它在cards
list 为空时所写的那样,它返回view
包含swipeRefreshLayout
without refreshListener
。因此,当您刷新时,没有任何反应,因为没有listener
.
解决方案是listener
在返回之前进行设置view
,如下所示:
...
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
//some code here
cards = Card.getActiveCards();
if (cards.isEmpty()) {
showMessage("Cards unavailable");
return view;
}
...
推荐阅读
- c# - 简单的 C# 白名单,查找用户名和过期的问题
- python - np.ndarray`“是”中的奇怪行为
- android - 舞台线条画
- c# - 如何在 WinForm 应用程序中持续监控用户输入
- ios - 您已经拥有当前的 iOS 开发证书或待处理的证书请求
- r - 在R中的同一图中绘制具有不同xintervals的两个文件
- python-3.x - 继承与使用一个类的类对象作为另一个类的字段(Python 3)
- firebase - 从 Firebase Cloud Functions 更新 Firebase Analytics 中的用户属性
- compilation - unistd.h 和 crypt.h 中的 crypt 有什么区别?
- python - 在 ubuntu 中启动时自动运行图形化 python 脚本