RecyclerView上拉刷新,下拉加载

compile 'com.android.support:recyclerview-v7:25.3.1'

activity_main.xml

<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_widget"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            </android.support.v7.widget.RecyclerView>

    </android.support.v4.widget.SwipeRefreshLayout>

home_item.xml

   <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
public class RecyleAdapter extends RecyclerView.Adapter {

    private Context mcontext;
    private List<FragBean.ResultBean.DataBean> list = new ArrayList<>();
    private FragBean mHomePresenter;

    public RecyleAdapter(Context context) {
        this.mcontext = context;
    }

    public void setPresenter(FragBean presenter) {
        this.mHomePresenter = presenter;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(mcontext, R.layout.home_item, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyViewHolder myViewHolder = (MyViewHolder) holder;
        myViewHolder.textView.setText(list.get(position).getTitle());
        getiamgeforServer(myViewHolder.imageView, list.get(position).getThumbnail_pic_s());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public void setData(List<FragBean.ResultBean.DataBean> data) {
        if (data != null) {
            list.addAll(data);
        }
    }

    public void getiamgeforServer(ImageView imageView, String url) {
        x.image().bind(imageView, url);
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;
        private final ImageView imageView;

        public MyViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.textView);
            imageView = (ImageView) itemView.findViewById(R.id.imageView);
        }

        private void initListener(View itemView) {
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mcontext, "poistion " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    public void AddHeaderItem(List<FragBean.ResultBean.DataBean> list) {
        this.list.addAll(0, list);
        notifyDataSetChanged();
    }

    public void AddFootItem(List<FragBean.ResultBean.DataBean> list) {
        this.list.addAll(list);
        notifyDataSetChanged();
    }
}
   private RecyclerView recyclerView;
    private HashMap<String, String> hashMap = new HashMap<>();
    private String url = "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=gj";
    private FragBean fragBean;
    private RecyleAdapter adapter;
    private GridLayoutManager gridLayoutManager;
    private SwipeRefreshLayout mSwipeRefreshWidget;

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mSwipeRefreshWidget = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_widget);
        recyclerView.addItemDecoration(new MyRecyclerView(MainActivity.this));
        mSwipeRefreshWidget.setColorSchemeColors(Color.BLUE, Color.BLACK,
                Color.RED, Color.YELLOW);
        // 这句话是为了,第一次进入页面的时候显示加载进度条
//        mSwipeRefreshWidget.setProgressViewOffset(false, 0, (int) TypedValue
//                .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()
//                        .getDisplayMetrics()));
//        mSwipeRefreshWidget.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
//            @Override
//            public void onRefresh() {
//
//            }
//        });
        initHttp();
        initHttpT();

    }

    private void initHttpT() {
        //创建适配器
        adapter = new RecyleAdapter(this);
        gridLayoutManager = new GridLayoutManager(this, 3);
        int a = 3;
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(a, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(gridLayoutManager);

    }

    private void initHttp() {
        RequestParams params = new RequestParams();
        params.setUri(url);
        if (hashMap != null) {
            Iterator<String> iterator = hashMap.keySet().iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                String value = hashMap.get(key);
                params.addQueryStringParameter(key, value);
            }
        }
        x.http().get(params, new Callback.CommonCallback<String>() {


            @Override
            public void onSuccess(String result) {
                System.out.println("123123" + result);
                Gson gson = new Gson();
                fragBean = gson.fromJson(result, FragBean.class);
                adapter.setPresenter(fragBean);
                adapter.setData(fragBean.getResult().getData());
                recyclerView.setAdapter(adapter);
                initPullRefresh();
                initLoadMoreListener();
            }


            @Override
            public void onError(Throwable ex, boolean isOnCallback) {

            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });
    }

    private void initPullRefresh() {
        mSwipeRefreshWidget.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
//                        List<String> headDatas = new ArrayList<String>();
//                        for (int i = 20; i <30 ; i++) {
//
//                            headDatas.add("Heard Item "+i);
//                        }

                        List<FragBean.ResultBean.DataBean> data = fragBean.getResult().getData();
                        adapter.AddHeaderItem(data);

                        //刷新完成
                        mSwipeRefreshWidget.setRefreshing(false);
                        Toast.makeText(MainActivity.this, "更新了 " + data.size() + " 条目数据", Toast.LENGTH_SHORT).show();
                    }

                }, 3000);
            }
        });
    }

    private void initLoadMoreListener() {
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            int lastVisibleItem;

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == adapter.getItemCount()) {
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
//                        List<String> headDatas = new ArrayList<String>();
//                        for (int i = 20; i <30 ; i++) {
//
//                            headDatas.add("Heard Item "+i);
//                        }

                            List<FragBean.ResultBean.DataBean> data = fragBean.getResult().getData();
                            adapter.AddFootItem(data);
                            Toast.makeText(MainActivity.this, "更新了 " + data.size() + " 条目数据", Toast.LENGTH_SHORT).show();
                        }

                    }, 3000);
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                GridLayoutManager layoutManager = (GridLayoutManager) recyclerView.getLayoutManager();
                //最后一个可见的ITEM
                lastVisibleItem = layoutManager.findLastVisibleItemPosition();
            }
        });
    }

猜你喜欢

转载自blog.csdn.net/peotry_favour/article/details/72514809