【发布时间】:2018-09-24 13:22:12
【问题描述】:
如何通过 SwipeRefreshLayout 刷新 RecyclerView?我在谷歌上搜索了很多,但它不起作用。这是我的代码片段 我通过 Jason Parsing 从服务器获取数据并进入数组并将数组设置到我的 RecyclerView 适配器中。数据显示正常,但 SwipeRefreshLayout 不起作用。
public class FirstFragment extends Fragment{
public RecyclerView recyclerView;
public SwipeRefreshLayout mswipeRefreshLayout;
public static MyRecyclerAdapter searchAdapter;
private static final String TAG = "FirstFragment";
MyRecyclerAdapter myRecyclerAdapter;
ArrayList<DataStored>dataStoredArrayList;
private ParseDataClass mparser;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
View view=inflater.inflate(R.layout.first_fragment,null);
recyclerView=(RecyclerView)view.findViewById(R.id.mFirstRecyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
mswipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swipelayoutm);
mparser = new ParseDataClass(getActivity());
mparser.setOnDataRetrievalCallback(new OnDataRetrievalCallback() {
@Override
public void onDataRetrieval(ArrayList<DataStored> dataSet) {
dataStoredArrayList=dataSet;
myRecyclerAdapter=new MyRecyclerAdapter(getActivity(),dataStoredArrayList,mswipeRefreshLayout);
searchAdapter =myRecyclerAdapter;
recyclerView.setAdapter(myRecyclerAdapter);
}
});
mparser.execute("http://192.168.3.10/fetchtext.php", "1");
recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollX == 0) {
mswipeRefreshLayout.setEnabled(true);
} else mswipeRefreshLayout.setEnabled(false);
}
});
mswipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Refreshlist();
mswipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
private void Refreshlist() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
dataStoredArrayList.clear();
myRecyclerAdapter.notifyDataSetChanged();
mparser = new ParseDataClass(getActivity());
mparser.setOnDataRetrievalCallback(new OnDataRetrievalCallback() {
@Override
public void onDataRetrieval(ArrayList<DataStored> dataSet) {
dataStoredArrayList.addAll(dataSet);
myRecyclerAdapter.notifyDataSetChanged();
}
});
mparser.execute("http://192.168.3.10/fetchtext.php", "1");
}
}, 0);
}
}
【问题讨论】:
-
设置 mswipeRefreshLayout.setRefreshing(false);紧接在 myRecyclerAdapter.notifyDataSetChanged();
-
我已经这样做了,但没有工作我认为我遵循的这种方法是错误的。
-
请查看所有片段代码
-
RefreshList 函数在这里不起作用是 RefreshList 函数中的问题
-
您是故意添加延迟吗? 3秒?为什么你要再次添加回调?刷新列表中的 mparser.setOnDataRetrievalCallback。
标签: android android-fragments android-recyclerview pull-to-refresh