我希望我的布局在应用程序启动时刷新,数据应显示在中,当用户滑动时,数据应更新,并显示新数据(如果服务器上有新数据)。
实际的问题是,数据在应用程序启动时没有加载。而是只在滑动时发生。我如何才能实现在打开应用程序时先加载数据,然后在滑动时更新数据?
public class FirstFragment extends Fragment {
FragmentFirstBinding binding;
APIInterfaces interfaces;
ArrayList<VideoModels> list = new ArrayList<>();
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentFirstBinding.inflate(inflater, container, false);
MyAdapter adapter = new MyAdapter(list,getContext());
binding.myRecyclerView.setAdapter(adapter);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2);
binding.myRecyclerView.setLayoutManager(gridLayoutManager);
interfaces = RetrofitInstance.getRetrofit().create(APIInterfaces.class);
binding.swipeToRefresh.setRefreshing(true);
binding.swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
interfaces.getPosts().enqueue(new Callback<List<VideoModels>>() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onResponse(@NonNull Call<List<VideoModels>> call, @NonNull Response<List<VideoModels>> response) {
list.clear();
if (response.isSuccessful()) {
assert response.body() != null;
list.addAll(response.body());
adapter.notifyDataSetChanged();
binding.swipeToRefresh.setRefreshing(false);
}
}
@Override
public void onFailure(@NonNull Call<List<VideoModels>> call, @NonNull Throwable t) {
Toast.makeText(getContext(), "Check you Internet", Toast.LENGTH_SHORT).show();
binding.swipeToRefresh.setRefreshing(false);
}
});
}
});
binding.swipeToRefresh.setRefreshing(false);
return binding.getRoot();
}
}
EDIT-1:已添加完整代码。
你的回答对我有帮助。
3条答案
按热度按时间cdmah0mi1#
您需要在onResume()状态下调用此方法
nkhmeac62#
如果调用
binding.swipeLayout.isRefreshing = true
在SwipeRefreshLayout源代码中,
mNotify
布尔值为false,因此无法在setOnRefreshListener
中执行任何操作这就是为什么不调用
setOnRefreshListener
原因,如果您希望手动调用它,请按如下方式操作:reflect setmNotify
boolean value istruegstyhher3#
在找到解决办法的1天后。终于,我找到了我的解决办法。
要使用
SwipeRefreshLayout
,请在Fragment
中工作,并希望刷新您的数据Onswipe
。使用下面的代码,并根据您的需要修改它。这是一个
fragment
。