新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
- 新WaveSwipeRefreshLayout+RecyclerView上拉加载下拉刷新+多条目布局
- 简单实现WaveSwipeRefreshLayout+RecyclerView的上拉加载下拉刷新的功能
- recyclerview,okHttp,布局切换,springView上拉刷新下拉加载
- 下拉刷新上拉加载,XListView多条目加载,TabPageIndicator
- XListView多条目加载+TabPageIndicator+下拉刷新上拉加载
- XRecyclerView+上拉加载下拉刷新+多条目加载
- PullToRefreshListView多条目加载上拉刷新下拉加载
- 上拉刷新下拉加载(多条目)
- LIstView多条目展示+XListView下拉刷新,上拉加载
- Recyclerview布局多条目加载+上下拉
- RecyclerView实现上拉加载,下拉刷新
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView实现上拉加载,下拉刷新
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView的上拉加载,下拉刷新
- RecyclerView 下拉刷新和上拉加载
- RecyclerView下拉刷新上拉加载
- RecyclerView下拉刷新上拉加载
- CDLinux:如何切换到管理员
- RadioButton点击变色
- 【NOIP2017提高A组模拟10.8】Lost My Music
- 文件目录权限chmod/chown & 隐藏权限
- Okhttp封装
- 新WaveSwipeRefreshLayout+RecyclerView上拉加载下拉刷新+多条目布局
- GeekBand笔记-《C++面向对象高级编程(上)》 第一周
- HTML 图片映射,一个图片映射多个链接<map>
- 10-25 并查集神题——过路费(CodeVS)
- Handler倒计时跳转1v
- 初级phper的学习历程
- Recycleview实现购物车
- Kaldi语音识别注意事项
- CNN:卷积神经网络