//所用到的依赖
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来获取网络数据