gpt4 book ai didi

android - SwipeRefreshLayout 没有停止刷新

转载 作者:行者123 更新时间:2023-11-29 16:40:13 26 4
gpt4 key购买 nike

fragment 的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 列表为空时编写的,所以它返回包含 swipeRefreshLayout 而没有 refreshListenerview。因此,当您刷新时,不会发生任何事情,因为没有 listener

解决方法就是在返回view之前设置listener,像这样:

...

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});

//some code here

cards = Card.getActiveCards();
if (cards.isEmpty()) {
showMessage("Cards unavailable");
return view;
}
...

关于android - SwipeRefreshLayout 没有停止刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com