上下拉刷新

主类

package com.mydemo;

import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.mydemo.utils.GsonObjectCallback;
import com.mydemo.utils.OkHttp3Utils;

import java.io.IOException;
import java.util.List;

import okhttp3.Call;



public class MainActivity extends AppCompatActivity {

    RecyclerView rc;
    SwipeRefreshLayout swf;
    LinearLayoutManager layoutManager;
    MyNewAdapter adapter;
    String url="http://news-at.zhihu.com/api/4/news/latest";
    String urlMore="http://news-at.zhihu.com/api/4/news/before/20131119";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rc= (RecyclerView) findViewById(R.id.rc);
        swf= (SwipeRefreshLayout) findViewById(R.id.swf);

        layoutManager = new LinearLayoutManager(MainActivity.this);
        rc.setLayoutManager(layoutManager);

        getServerData();

        swf.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener()  {
            @Override
            public void onRefresh() {
                OkHttp3Utils.doGet(urlMore, new GsonObjectCallback<NewsBean>() {
                    @Override
                    public void onUi(NewsBean newsBean) {
                        List<NewsBean.StoriesBean> stories = newsBean.getStories();
                        adapter.refreshMore(stories);
                    }

                    @Override
                    public void onFailed(Call call, IOException e) {
                    }

                });

                if(swf.isRefreshing()){
                    //隐藏掉下拉刷新进度条
                    swf.setRefreshing(false);
                }
            }
        });

//RecycleView天机滚动监听
        rc.addOnScrollListener(new RecyclerView.OnScrollListener(){
            private int lastPOsition;
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if(lastPOsition+1==adapter.getItemCount()&&newState==RecyclerView.SCROLL_STATE_IDLE){
                    OkHttp3Utils.doGet(urlMore, new GsonObjectCallback<NewsBean>() {
                        @Override
                        public void onUi(NewsBean newsBean) {
                            List<NewsBean.StoriesBean> stories = newsBean.getStories();
                            adapter.loadMore(stories);
                        }
                        @Override
                        public void onFailed(Call call, IOException e) {
                        }
                    });
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                lastPOsition = layoutManager.findLastVisibleItemPosition();
            }
        });

    }

    private void getServerData() {
        OkHttp3Utils.doGet(url, new GsonObjectCallback<NewsBean>() {
            @Override
            public void onUi(NewsBean newsBean) {

                if(adapter==null){
                    List<NewsBean.TopStoriesBean> top_stories = newsBean.getTop_stories();
                    adapter = new MyNewAdapter(MainActivity.this,newsBean,top_stories);
                    rc.setAdapter(adapter);
                }else{
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onFailed(Call call, IOException e) {

            }

        });
    }
}

适配器----------------------------------------------------------------


package com.mydemo;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;



public class MyNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    List<NewsBean.TopStoriesBean> top_stories;
    Context context;
    NewsBean newsBean;
    List<NewsBean.StoriesBean> stories;

    public MyNewAdapter(Context context, NewsBean newsBean, List<NewsBean.TopStoriesBean> top_stories) {
        this.context = context;
        this.newsBean = newsBean;
        this.top_stories=top_stories;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        if(viewType==0){
            View view = LayoutInflater.from(context).inflate(R.layout.footer_item, parent, false);
            return new VHFooter(view);
        }else{
            View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            return new  Content(view);
        }



    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        int type = getItemViewType(position);
        if(type==0){
            return;
        }
        if(type==1) {
            Content content=new Content(holder.itemView);

            stories = newsBean.getStories();
            content.tv_newTitle.setText(stories.get(position).getTitle());
            content.tv_newTime.setText(stories.get(position).getGa_prefix());
        }

    }

    @Override
    public int getItemCount() {
        return newsBean.getStories().size()+1;
    }

    @Override
    public int getItemViewType(int position) {
        if(position==getItemCount()-1){
            return 0;
        }else
        {
            return 1;
        }
    }

    private class Content extends RecyclerView.ViewHolder{

        private final ImageView iv_new;
        private final TextView tv_newTitle;
        private final TextView tv_newTime;

        public Content(View itemView) {
            super(itemView);
            iv_new = (ImageView) itemView.findViewById(R.id.iv_new);
            tv_newTitle = (TextView) itemView.findViewById(R.id.tv_newTitle);
            tv_newTime = (TextView) itemView.findViewById(R.id.tv_NewTime);
        }
    }

    private class VHFooter extends RecyclerView.ViewHolder{

        public VHFooter(View itemView) {
            super(itemView);
        }
    }

    public void loadMore(List<NewsBean.StoriesBean> s ){
        for (NewsBean.StoriesBean str : s){
            stories.add(str);
        }
        //更新界面
        notifyDataSetChanged();

    }

    public void refreshMore(List<NewsBean.StoriesBean> s){
        for (NewsBean.StoriesBean str : s){
            stories.add(0,str);
        }
        //更新界面
        notifyDataSetChanged();
    }
}


bean类
参考
 
package com.mydemo;

import java.util.List;



public class NewsBean {

    /**
     * date : 20171025
     * stories : [{"title":"装修不要电视墙、吊顶、壁纸,咦,怎么好像廉价出租屋?","ga_prefix":"102519","images":["https://pic4.zhimg.com/v2-20e7b66c633a90d49a048b4453a591af.jpg"],"multipic":true,"type":0,"id":9653932},{"images":["https://pic1.zhimg.com/v2-08f97fddae1aa35993d4dfb14ea31054.jpg"],"type":0,"id":9653750,"ga_prefix":"102518","title":"为什么很多女生会喜欢听甜言蜜语?"},{"images":["https://pic1.zhimg.com/v2-b4747aa8b8e4f5d9af2115430862b9f0.jpg"],"type":0,"id":9653557,"ga_prefix":"102517","title":"郭襄寻不到杨过出家为尼,为何不回到家人身边抵抗敌人同生共死?"},{"images":["https://pic2.zhimg.com/v2-4f639930a1cf7e6e2f530343cfacb439.jpg"],"type":0,"id":9653800,"ga_prefix":"102516","title":"你想当一个活着的怪物,还是做一个死去的好人?"},{"images":["https://pic2.zhimg.com/v2-3af4452834bd47d965de04e32b056fe9.jpg"],"type":0,"id":9653394,"ga_prefix":"102515","title":"如今「坏人」已经可以列出 18 种,他们擅长的东西你都不要信"},{"images":["https://pic3.zhimg.com/v2-7b58d1a1a38b6302d76d2698b0a08d8a.jpg"],"type":0,"id":9653576,"ga_prefix":"102514","title":"把树抱住后使劲摇摇摇\u2026\u2026你看人家这摘果子的方法清奇的"},{"images":["https://pic1.zhimg.com/v2-714718adf58cc1a111c422d2514e2354.jpg"],"type":0,"id":9653776,"ga_prefix":"102513","title":"记住这些知识点,去日本迷失在车站里也能会心一笑"},{"images":["https://pic2.zhimg.com/v2-36c115eaf6a006719f71a94cd2993f59.jpg"],"type":0,"id":9653346,"ga_prefix":"102512","title":"大误 · 让地球从内到外冷下来"},{"images":["https://pic3.zhimg.com/v2-c98d605967a61c53abd811e683e62dde.jpg"],"type":0,"id":9653785,"ga_prefix":"102511","title":"歌手是怎么创作歌曲的?"},{"images":["https://pic3.zhimg.com/v2-ed8af5cd65b6bca6c9b4966b05e1b72a.jpg"],"type":0,"id":9653414,"ga_prefix":"102510","title":"虽说「人心狠毒」,为什么很少见到真正有毒的哺乳动物?"},{"images":["https://pic4.zhimg.com/v2-c48d2c752ec7b8b183055667b76596c7.jpg"],"type":0,"id":9653540,"ga_prefix":"102509","title":"没和身边人一起进大律所,可后来,我却学得比他们多"},{"images":["https://pic3.zhimg.com/v2-8d3803d6014153f1aa9835b47ccd7db2.jpg"],"type":0,"id":9653658,"ga_prefix":"102508","title":"没有「爆裂脑花」、细思 bug 极多\u2026\u2026唯一的亮点只剩特工代号"},{"images":["https://pic3.zhimg.com/v2-8569d560d951c65cc1c712b8976c8fba.jpg"],"type":0,"id":9653620,"ga_prefix":"102507","title":"身为杂食性动物的两脚兽,我们要吃蔬菜水果,喵汪星人呢?"},{"images":["https://pic2.zhimg.com/v2-340313b0e29d374f9a7fbe3cb45483e1.jpg"],"type":0,"id":9653718,"ga_prefix":"102507","title":"姚老板的球队能卖多少钱,起决定作用的是他另一个身份"},{"images":["https://pic3.zhimg.com/v2-d839d13157eb525ed60c34e39fee4d1a.jpg"],"type":0,"id":9653251,"ga_prefix":"102507","title":"《天才枪手》式的造富神话:非典型批片、中国采购团和弯道超车梦"},{"images":["https://pic1.zhimg.com/v2-ea05acac99ff29b8d1b60de506dbcfe4.jpg"],"type":0,"id":9653582,"ga_prefix":"102506","title":"瞎扯 · 如何正确地吐槽"}]
     * top_stories : [{"image":"https://pic3.zhimg.com/v2-20786b64172211a00c6e611b1bfbb2b6.jpg","type":0,"id":9653557,"ga_prefix":"102517","title":"郭襄寻不到杨过出家为尼,为何不回到家人身边抵抗敌人同生共死?"},{"image":"https://pic4.zhimg.com/v2-97d9c4d8c3c673b10772682e5ac0c137.jpg","type":0,"id":9653785,"ga_prefix":"102511","title":"歌手是怎么创作歌曲的?"},{"image":"https://pic2.zhimg.com/v2-e7582788c34b9d40b7b849ea3458d0dd.jpg","type":0,"id":9653718,"ga_prefix":"102507","title":"姚老板的球队能卖多少钱,起决定作用的是他另一个身份"},{"image":"https://pic1.zhimg.com/v2-e5b5e2342378517d1ddeb3f26496367c.jpg","type":0,"id":9653251,"ga_prefix":"102507","title":"《天才枪手》式的造富神话:非典型批片、中国采购团和弯道超车梦"},{"image":"https://pic2.zhimg.com/v2-2f8827e1dd120aecea73713fd27f67d1.jpg","type":0,"id":9653576,"ga_prefix":"102514","title":"把树抱住后使劲摇摇摇\u2026\u2026你看人家这摘果子的方法清奇的"}]
     */

    private String date;
    private List<StoriesBean> stories;
    private List<TopStoriesBean> top_stories;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List<StoriesBean> getStories() {
        return stories;
    }

    public void setStories(List<StoriesBean> stories) {
        this.stories = stories;
    }

    public List<TopStoriesBean> getTop_stories() {
        return top_stories;
    }

    public void setTop_stories(List<TopStoriesBean> top_stories) {
        this.top_stories = top_stories;
    }

    public static class StoriesBean {
        /**
         * title : 装修不要电视墙、吊顶、壁纸,咦,怎么好像廉价出租屋?
         * ga_prefix : 102519
         * images : ["https://pic4.zhimg.com/v2-20e7b66c633a90d49a048b4453a591af.jpg"]
         * multipic : true
         * type : 0
         * id : 9653932
         */

        private String title;
        private String ga_prefix;
        private boolean multipic;
        private int type;
        private int id;
        private List<String> images;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getGa_prefix() {
            return ga_prefix;
        }

        public void setGa_prefix(String ga_prefix) {
            this.ga_prefix = ga_prefix;
        }

        public boolean isMultipic() {
            return multipic;
        }

        public void setMultipic(boolean multipic) {
            this.multipic = multipic;
        }

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public List<String> getImages() {
            return images;
        }

        public void setImages(List<String> images) {
            this.images = images;
        }
    }

    public static class TopStoriesBean {
        /**
         * image : https://pic3.zhimg.com/v2-20786b64172211a00c6e611b1bfbb2b6.jpg
         * type : 0
         * id : 9653557
         * ga_prefix : 102517
         * title : 郭襄寻不到杨过出家为尼,为何不回到家人身边抵抗敌人同生共死?
         */

        private String image;
        private int type;
        private int id;
        private String ga_prefix;
        private String title;

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image;
        }

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getGa_prefix() {
            return ga_prefix;
        }

        public void setGa_prefix(String ga_prefix) {
            this.ga_prefix = ga_prefix;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值