onCreateView片段的内部方法:
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
Run Code Online (Sandbox Code Playgroud)
我的refresh()方法是这样的:
public void {
//some action
swipeRefreshLayout.setRefreshing(false);
}
Run Code Online (Sandbox Code Playgroud)
但有时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);
}
Run Code Online (Sandbox Code Playgroud)
}
我想回答我自己的问题,以便有人能找到解决方案,如果他/她犯了同样的错误。
我的问题是有时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();
}
});
...
Run Code Online (Sandbox Code Playgroud)
正如当cardslist 为空时所写的那样,它返回view包含swipeRefreshLayout而没有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;
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |