新WaveSwipeRefreshLayout+RecyclerView上拉加载下拉刷新+多条目布局


//所用到的依赖

repositories {
    maven {
        url "https://jitpack.io"
    }
}

compile 'com.android.support:recyclerview-v7:26.+'
compile 'com.github.recruit-lifestyle:WaveSwipeRefreshLayout:1.6'

//main布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="zhoukao.demo01.com.shuaxin.MainActivity">

    <jp.co.recruit_lifestyle.android.widget.WaveSwipeRefreshLayout
        android:id="@+id/wave"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>

    </jp.co.recruit_lifestyle.android.widget.WaveSwipeRefreshLayout>

</LinearLayout>
 
//MainActivity
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

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

import jp.co.recruit_lifestyle.android.widget.WaveSwipeRefreshLayout;
import okhttp3.Call;
import zhoukao.demo01.com.shuaxin.utils.GsonObjectCallback;
import zhoukao.demo01.com.shuaxin.utils.OkHttp3Utils;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private WaveSwipeRefreshLayout mWaveSwipeRefreshLayout;
    private Handler handler = new Handler();
    private StaggeredGridLayoutManager staggeredGridLayoutManager;
    private LinearLayoutManager layoutManager;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        recyclerView = (RecyclerView) findViewById(R.id.recycler);

        getData();
//        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        //布局管理器
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        mWaveSwipeRefreshLayout = (WaveSwipeRefreshLayout) findViewById(R.id.wave);
        //设置中间小圆从白色到黑色
        mWaveSwipeRefreshLayout.setColorSchemeColors(Color.WHITE, Color.BLACK);
        //设置整体的颜色
        mWaveSwipeRefreshLayout.setWaveColor(Color.argb(255, 255, 0, 0));
        //下拉刷新
        mWaveSwipeRefreshLayout.setOnRefreshListener(new WaveSwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        OkHttp3Utils.doGet("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new GsonObjectCallback<DataBean>() {
                            @Override
                            public void onUi(DataBean dataBean) {
                                List<DataBean.ResultsBean> list = dataBean.getResults();
                                myAdapter.refreshMore(list);
                            }

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

                            }
                        });
                        //三秒后停止刷新
                        mWaveSwipeRefreshLayout.setRefreshing(false);
                    }
                },3000);
            }
        });
        //上拉加载
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener(){

            private int lastPosition;

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(lastPosition+1==myAdapter.getItemCount()&&newState==RecyclerView.SCROLL_STATE_IDLE){
                    OkHttp3Utils.doGet("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new GsonObjectCallback<DataBean>() {
                        @Override
                        public void onUi(DataBean dataBean) {
                            List<DataBean.ResultsBean> list = dataBean.getResults();
                            myAdapter.loadMore(list);
                        }

                        @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 getData(){
        OkHttp3Utils.doGet("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new GsonObjectCallback<DataBean>() {
            @Override
            public void onUi(DataBean dataBean) {
                List<DataBean.ResultsBean> list = dataBean.getResults();
                if(myAdapter==null){
                    myAdapter = new MyAdapter(MainActivity.this,list);
                    recyclerView.setAdapter(myAdapter);
                }else {
                    myAdapter.notifyDataSetChanged();
                }

            }

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

            }
        });
    }

}
//适配器优化显示多条目加载
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 com.squareup.picasso.Picasso;

import java.util.List;


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

    private Context context;
    private List<DataBean.ResultsBean> list;

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

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

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(viewType == 0){
            View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            MyViewHolder myViewHolder = new MyViewHolder(view);
            return myViewHolder;
        }else {
            View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
            MyViewHolder2 myViewHolder2 = new MyViewHolder2(view);
            return myViewHolder2;
        }


    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        /*ViewGroup.LayoutParams params = holder.iv_recy.getLayoutParams();
        if(position == 0){
            params.height = 200;
        }else{
            params.height = 400;
        }*/
        //holder.iv_recy.setLayoutParams(params);

        if(holder instanceof MyViewHolder){
            MyViewHolder holder1 = (MyViewHolder) holder;
            Picasso.with(holder1.iv_recy.getContext()).load(list.get(position).getUrl()).into(holder1.iv_recy);

            holder1.tv_recy.setText(list.get(position).getType());
        }else if(holder instanceof MyViewHolder2){
            MyViewHolder2 holder2 = (MyViewHolder2) holder;
            Picasso.with(holder2.iv_recy2.getContext()).load(list.get(position).getUrl()).into(holder2.iv_recy2);

            holder2.tv_recy2.setText(list.get(position).getType());
        }

    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder{

        ImageView iv_recy;
        TextView tv_recy;

        public MyViewHolder(View itemView) {
            super(itemView);
            iv_recy = (ImageView) itemView.findViewById(R.id.iv_recy);
            tv_recy = (TextView) itemView.findViewById(R.id.tv_recy);

        }
    }
    public class MyViewHolder2 extends RecyclerView.ViewHolder{

        ImageView iv_recy2;
        TextView tv_recy2;

        public MyViewHolder2(View itemView) {
            super(itemView);
            iv_recy2 = (ImageView) itemView.findViewById(R.id.iv_recy2);
            tv_recy2 = (TextView) itemView.findViewById(R.id.tv_recy2);

        }
    }


    public void loadMore(List<DataBean.ResultsBean> li){
        for (DataBean.ResultsBean str : li){
            list.add(str);
        }
        //更新界面
        notifyDataSetChanged();

    }
    public void refreshMore(List<DataBean.ResultsBean> li){
        for (DataBean.ResultsBean str : li){
            list.add(0,str);
        }
        //更新界面
        notifyDataSetChanged();

    }
}
//第一个item布局
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv_recy"
        android:layout_width="60dp"
        android:layout_height="60dp" />
    <TextView
        android:id="@+id/tv_recy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

//第二个item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv_recy2"
        android:layout_width="60dp"
        android:layout_height="60dp" />
    <TextView
        android:id="@+id/tv_recy2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
//其中我用到了OKHTTP3的网络请求 因为是自己封装的一个网络请求数据 所以大家要是不清楚的话 可以使用HttpURLConntion来获取网络数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值