Android 如何在片段内部的CardView上实现SwipeRefreshLayout?

Android 如何在片段内部的CardView上实现SwipeRefreshLayout?,android,swiperefreshlayout,cardview,Android,Swiperefreshlayout,Cardview,RecentNewsFragment.java 如您所见,这是我为CardView构建的代码。不幸的是,我的布局不起作用。它可以工作,但仅限于动画,不会刷新视图。我是不是把setOnRefreshListener放错地方了,还是我只是错过了什么?谢谢您的帮助。您的回调方法放错了位置。您应该在onRefresh方法中创建一个新请求,而不是相反 private static final String NEWS_URL = "http://192.168.0.29/theflare/app/news.

RecentNewsFragment.java


如您所见,这是我为CardView构建的代码。不幸的是,我的布局不起作用。它可以工作,但仅限于动画,不会刷新视图。我是不是把setOnRefreshListener放错地方了,还是我只是错过了什么?谢谢您的帮助。

您的回调方法放错了位置。您应该在onRefresh方法中创建一个新请求,而不是相反

private static final String NEWS_URL = "http://192.168.0.29/theflare/app/news.php";

private SwipeRefreshLayout mSwipeRefreshLayout;
private RecyclerView mRecyclerView;

@Override
public view onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    // ...

    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            loadNews();
        }
    });

    return view;
}

private void loadNews() {
    StringRequest request = new StringRequest(Request.Method.GET, URL,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                ArrayList<News> newsList = new JsonConverter<News>().toArrayList(response, News.class);
                NewsArticleAdapter adapter = new NewsArticleAdapter(getActivity(), newsList);
                mRecyclerView.setAdapter(adapter);

                mSwipeRefreshLayout.setRefreshing(false);
            }
        });
    MySingleton.getInstance(getActivity()).addToRequestQueue(request);
}

问题:您正在刷新它以显示动画,2.5秒后,您只需使用SwiperFreshLayout.setRefreshingfalse禁用动画;但onRefresh内部没有执行任何请求。所以执行请求刷新这个工作!谢谢我不得不把一条新闻放进去;在要在片段中查看的onCreateView内部。但总的来说,这是一个很大的帮助,真的!再次感谢@马修米兰达很乐意帮忙。将loadView代码放在onCreateView中是非常好的。我只是将其分开以避免重复代码,通常您最终会调用相同的代码来最初加载数据并刷新数据。片段不应阻止您这样做。
private static final String NEWS_URL = "http://192.168.0.29/theflare/app/news.php";

private SwipeRefreshLayout mSwipeRefreshLayout;
private RecyclerView mRecyclerView;

@Override
public view onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    // ...

    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            loadNews();
        }
    });

    return view;
}

private void loadNews() {
    StringRequest request = new StringRequest(Request.Method.GET, URL,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                ArrayList<News> newsList = new JsonConverter<News>().toArrayList(response, News.class);
                NewsArticleAdapter adapter = new NewsArticleAdapter(getActivity(), newsList);
                mRecyclerView.setAdapter(adapter);

                mSwipeRefreshLayout.setRefreshing(false);
            }
        });
    MySingleton.getInstance(getActivity()).addToRequestQueue(request);
}