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

来源:互联网 发布:cyberduck mac版 编辑:程序博客网 时间:2024/06/05 08:44


//所用到的依赖

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
原创粉丝点击