1. 程式人生 > >RecyclerView新增頭部

RecyclerView新增頭部

一、Adapter中資料

package com.example.jiangshuncongykcs.adapter;

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

import com.bumptech.glide.Glide;
import com.example.jiangshuncongykcs.JsonBean;
import com.example.jiangshuncongykcs.R;

import java.util.List;

/**
 * Created by 
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.mViewHolder> {

    private List<JsonBean.DataBean> list;
    private Context context;
    private View mHeaderView;
    public static final int TYPE_HEADER = 0;
    public static final int TYPE_NORMAL = 1;

    public MyAdapter(List<JsonBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public mViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(mHeaderView != null && viewType == TYPE_HEADER) return new mViewHolder(mHeaderView);
        View inflate = View.inflate(context, R.layout.item, null);
        mViewHolder holder = new mViewHolder(inflate);

        return holder;
    }

    @Override
    public void onBindViewHolder(mViewHolder holder, int position) {
        JsonBean.DataBean dataBean = list.get(position);
        if(getItemViewType(position) == TYPE_HEADER) return;
        if(holder instanceof mViewHolder) {
            Glide.with(context).load(dataBean.getUserImg()).into(holder.iv_icon);
            holder.tv_msg.setText(dataBean.getIntroduction());
        }
    }

    public void setHeaderView(View headerView) {
        mHeaderView = headerView;
        notifyItemInserted(0);
    }

    public View getHeaderView() {
        return mHeaderView;
    }

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

    @Override
    public int getItemViewType(int position) {
        if(mHeaderView == null) return TYPE_NORMAL;
        if(position == 0) return TYPE_HEADER;
        return TYPE_NORMAL;
    }

    class mViewHolder extends RecyclerView.ViewHolder{

        ImageView iv_icon;
        TextView tv_msg;

        public mViewHolder(View itemView) {
            super(itemView);
            iv_icon = itemView.findViewById(R.id.iv_icon);
            tv_msg = itemView.findViewById(R.id.tv_msg);
        }
    }
}
二、Fragment中
package com.example.jiangshuncongykcs;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
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 com.bumptech.glide.Glide;
import com.example.jiangshuncongykcs.adapter.MyAdapter;
import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.stx.xhb.xbanner.XBanner;
import com.stx.xhb.xbanner.transformers.Transformer;

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

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by 蔣順聰 on 2017/10/25.
 */

public class Fragment1 extends Fragment{

    private View view;
    private XBanner vp_viewpager;
    private List<String> list = new ArrayList<>();
    private XRecyclerView rv_recyclerview;
    private int page = 1;
    List<JsonBean.DataBean> data2 = new ArrayList<>();
    private MyAdapter adapter;
    private View view2;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = View.inflate(getContext(), R.layout.fragment1_layout, null);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initview();
        initdata();


        // 為XBanner繫結資料
        vp_viewpager.setData(list, null);
        // XBanner適配資料
        vp_viewpager.setmAdapter(new XBanner.XBannerAdapter() {
            @Override
            public void loadBanner(XBanner banner, View view, int position) {
                Glide.with(getContext()).load(list.get(position)).into((ImageView) view);
            }
        });

        // 設定XBanner的頁面切換特效
        vp_viewpager.setPageTransformer(Transformer.Default);
        // 設定XBanner頁面切換的時間,即動畫時長
        vp_viewpager.setPageChangeDuration(500);

        initmsg(page);


    }

    private void initmsg(int page2) {
        OkHttpClient intance = OkHttpUtils.getIntance();
        FormBody.Builder builder = new FormBody.Builder();
        builder.add("sign","C7548DE604BCB8A17592EFB9006F9265");
        builder.add("pageSize","20");
        builder.add("gender","2");
        builder.add("ts","1871746850");
        builder.add("page",page2+"");
        Request request = new Request.Builder().url(API.url).post(builder.build()).build();
        intance.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("請求出錯了");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response != null && response.isSuccessful()){
                    String string = response.body().string();
                    JXJson(string);
                }
            }
        });
    }

    private void JXJson(String string) {
        JsonBean jsonBean = new Gson().fromJson(string, JsonBean.class);
        List<JsonBean.DataBean> data = jsonBean.getData();
        data2.addAll(data);
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(adapter == null){
                    adapter = new MyAdapter(data2,getContext());
                    rv_recyclerview.setAdapter(adapter);
                }else{
                    adapter.notifyDataSetChanged();
                }
                //為Recycler新增頭部
                setHeader(rv_recyclerview);
            }
        });

    }

    private void initdata() {
        list.add("http://img3.imgtn.bdimg.com/it/u=1875076909,3610813998&fm=27&gp=0.jpg");
        list.add("http://img5.imgtn.bdimg.com/it/u=2832476711,2379932980&fm=27&gp=0.jpg");
        list.add("http://img5.imgtn.bdimg.com/it/u=1944582709,2686578056&fm=27&gp=0.jpg");
        list.add("http://img3.imgtn.bdimg.com/it/u=1708842930,3481574449&fm=27&gp=0.jpg");
    }

    private void initview() {
        view2 = View.inflate(getContext(), R.layout.addhead, null);
        vp_viewpager = view2.findViewById(R.id.vp_viewpager);
        rv_recyclerview = view.findViewById(R.id.rv_recyclerview);
        rv_recyclerview.setLayoutManager(new LinearLayoutManager(getContext()));
        rv_recyclerview.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));
        rv_recyclerview.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                //重新整理操作
                data2.clear();
                adapter = null;
                page = 1;
                initmsg(page);
                rv_recyclerview.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                //載入更多的操作
                page++;
                initmsg(page);
                rv_recyclerview.loadMoreComplete();
            }
        });
    }

    //新增頭部的方法
    private void setHeader(XRecyclerView view) {
        adapter.setHeaderView(view2);
    }
}