在片段的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);
}}
发布于 2018-07-23 10:46:18
我想回答我自己的问题,这样如果某人犯了同样的错误,他/她就会找到解决办法。
我的问题是,有时并没有停止刷新。当我调试代码时,它甚至不会转到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列表为空时编写的,因此它返回包含没有refreshListener的swipeRefreshLayout的view。因此,当您刷新时,不会发生任何事情,因为没有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;
}
...发布于 2018-06-22 06:44:28
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listaNoticias"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginTop="5dp" >
<ListView>
</android.support.v4.widget.SwipeRefreshLayout>这里是java代码的实现;
public class classname extends Fragment implements OnRefreshListener {
SwipeRefreshLayout swipeLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.classname, container, false);
swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
swipeLayout.setOnRefreshListener(this);
@Override
public void onRefresh() {
//action
//and set false to stop.
}发布于 2018-06-22 08:11:33
只有在检测到滑动手势时才会触发SwipeRefreshLayout.OnRefreshListener,请参阅文档。
当滑动手势触发刷新时调用。
但是在您的代码中,您可以通过调用:
swipeRefreshLayout.setRefreshing(true);因此,刷新指示器从这里开始刷新,SwipeRefreshLayout.OnRefreshListener就不会被触发。如果您想在Fragment启动时开始刷新,只需在setRefreshing(true)之后立即调用refresh()
swipeRefreshLayout.setRefreshing(true);
refresh();或者,如果您想刷新直到用户做出一个滑动手势,只需删除这一行。
swipeRefreshLayout.setRefreshing(true);当检测到滑动手势时,您的SwipeRefreshLayout.OnRefreshListener将被触发。
https://stackoverflow.com/questions/50981917
复制相似问题