首先实现recycleview瀑布流效果 得到依赖
compile 'com.android.support:recyclerview-v7:25.0.0'
使用OKhttp网络请求框架 请求数据
compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okio:okio:1.5.0'
图片加载框架 用 picasso
compile 'com.squareup.picasso:picasso:2.5.1'
main 布局
<android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent" />不多说,,直接导代码
public class MainActivity extends AppCompatActivity { private RecyclerView rlv; private int page = 1; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==0){ String s = (String) msg.obj; Gson gson=new Gson(); User user = gson.fromJson(s, User.class); if(list==null){ list = new ArrayList<>(); } List<ResultsInfo> results = user.results; list.addAll(results); //设置适配器 initAdapter(); } } }; private int lastVisibleItem; private StaggeredGridLayoutManager staggeredGridLayoutManager; private int temp; private List<ResultsInfo> list; private void initAdapter() { //设置瀑布流管理器 staggeredGridLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); rlv.setLayoutManager(staggeredGridLayoutManager); //设置适配器 final MyAdapter adapter=new MyAdapter(MainActivity.this,list); rlv.setAdapter(adapter); //点击添加 adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View v) { //Toast.makeText(MainActivity.this,"好看",Toast.LENGTH_SHORT).show(); ResultsInfo resultsInfo=new ResultsInfo(); resultsInfo.url="http://7xi8d6.com1.z0.glb.clouddn.com/2017-04-11-17881546_248332202297978_2420944671002853376_n.jpg"; int position= rlv.getChildAdapterPosition(v); adapter.insert(position,resultsInfo); } }); //长按删除 adapter.setOnLongItemClickListener(new MyAdapter.OnLongItemClickListener() { @Override public void onLongItemClick(View v) { int position = rlv.getChildAdapterPosition(v); adapter.del(position); } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 rlv = (RecyclerView) findViewById(R.id.rlv); //获取网络数据 getServerData(); rlv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState== RecyclerView.SCROLL_STATE_IDLE&& lastVisibleItem+1==list.size()){ Toast.makeText(MainActivity.this, "加载中。。。。"+lastVisibleItem, Toast.LENGTH_SHORT).show(); page++; getServerData(); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int[] firstVisibleItemPositions = staggeredGridLayoutManager.findLastVisibleItemPositions(null); for (int firstVisibleItemPosition : firstVisibleItemPositions) { temp = firstVisibleItemPosition; if (lastVisibleItem < temp) { lastVisibleItem = firstVisibleItemPosition;//标记最后一个显示的postion } } // lastVisibleItem=layoutManager.findLastVisibleItemPosition(); } }); } private void getServerData() { OkHttpClient client = new OkHttpClient(); String url = "http://gank.io/api/data/福利/10/1" + page; Request request = new Request.Builder().url(url).build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { String s = response.body().string(); Message message = Message.obtain(); message.what = 0; message.obj=s; handler.sendMessage(message); } }); } } 适配器public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<ResultsInfo> list; //声明接口 public OnItemClickListener onItemClickListener; public OnLongItemClickListener onLongItemClickListener; //定义接口 public interface OnItemClickListener{ void onItemClick(View v); } public interface OnLongItemClickListener{ void onLongItemClick(View v); } //对外提供一个set方法 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public void setOnLongItemClickListener(OnLongItemClickListener onLongItemClickListener){ this.onLongItemClickListener=onLongItemClickListener; } public MyAdapter(Context context, List<ResultsInfo> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context, R.layout.recycleview_item,null); final MyViewHolder holder=new MyViewHolder(view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); if(onItemClickListener!=null){ onItemClickListener.onItemClick(v); } } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int position = holder.getAdapterPosition(); if(onLongItemClickListener!=null){ onLongItemClickListener.onLongItemClick(v); } return true; } }); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Picasso.with(context).load(list.get(position).url).into(holder.image); } @Override public int getItemCount() { return list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder{ private final ImageView image; public MyViewHolder(View itemView) { super(itemView); image = (ImageView) itemView.findViewById(R.id.image); } } public void insert(int position, ResultsInfo resultsInfo){ list.add(position,resultsInfo); notifyItemInserted(position); } public void del(int position){ list.remove(position); notifyItemRemoved(position); } }适配器布局<ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerCrop" />bean 类public class ResultsInfo { public String url; @Override public String toString() { return "ResultsInfo{" + "url='" + url + '\'' + '}'; } }public class User { public List<ResultsInfo> results; @Override public String toString() { return "User{" + "results=" + results + '}'; } }