所需要见的类
加载图片的依赖
compile 'com.github.bumptech.glide:glide:4.3.1' 接下来就是我们需要的重要的代码了package com.bwie.mvpokrecyclerview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import com.bwie.mvpokrecyclerview.adapter.NewsListAdapter; import com.bwie.mvpokrecyclerview.callback.INewsView; import com.bwie.mvpokrecyclerview.entity.NewsBean; import com.bwie.mvpokrecyclerview.presaenter.NewsPresenter; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements INewsView { private static final String TAG = "MainActivity"; private RecyclerView rvNews; private NewsPresenter presenter; private NewsListAdapter adapter; private List<NewsBean> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rvNews = (RecyclerView) findViewById(R.id.rv_news); list = new ArrayList<>(); adapter = new NewsListAdapter(this, list); LinearLayoutManager manager = new LinearLayoutManager(this); rvNews.setLayoutManager(manager); rvNews.setAdapter(adapter); presenter = new NewsPresenter(); presenter.attachView(this); presenter.getNews(); } @Override public void success(String tag, List<NewsBean> news) { if (null != news) { list.addAll(news); adapter.notifyDataSetChanged(); } } @Override public void failed(String tag, Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.detachView(); } } }封装一个HttpUtils做请求package com.bwie.mvpokrecyclerview.http; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import com.bwie.mvpokrecyclerview.callback.CallBack; import com.bwie.mvpokrecyclerview.utils.GsonUtils; import java.io.IOException; import java.util.Map; import java.util.logging.LogRecord; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by WuXirui * Create Time: 2017/11/9 * Description: */ public class HttpUtils { private static final String TAG = "HttpUtils"; private static volatile HttpUtils instance; private static Handler handler = new Handler(); private HttpUtils() { } public static HttpUtils getInstance() { if (null == instance) { synchronized (HttpUtils.class) { if (instance == null) { instance = new HttpUtils(); } } } return instance; } /** * Get请求 * * @param url * @param map * @param callBack * @param cls * @param tag */ public void get(String url, Map<String, String> map, final CallBack callBack, final Class cls, final String tag) { // http://www.baoidu.com/login?mobile=11111&password=11111&age=1&name=zw // 1.http://www.baoidu.com/login --------? key=value&key=value // 2.http://www.baoidu.com/login? --------- key=value&key=value // 3.http://www.baoidu.com/login?mobile=11111 -----&key=value&key=value if (TextUtils.isEmpty(url)) { return; } StringBuffer sb = new StringBuffer(); sb.append(url); // 如果包含?说明是2.3类型 if (url.contains("?")) { // 如果包含?并且?是最后一位,对应是2类型 if (url.indexOf("?") == url.length() - 1) { } else { // 如果包含?并且?不是最后一位,对应是3类型 sb.append("&"); } } else { // 不包含?,对应的1类型 sb.append("?"); } // 遍历map集合进行拼接,拼接的形式是 key=value& for (Map.Entry<String, String> entry : map.entrySet()) { sb.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } // 如果存在&号,把最后一个&去掉 if (sb.indexOf("&") != -1) { sb.deleteCharAt(sb.lastIndexOf("&")); } Log.i(TAG, "get url: " + sb); OkHttpClient client = new OkHttpClient(); final Request request = new Request.Builder() .get() .url(sb.toString()) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { // 通过自己传进来的回调接口对象回传回去 callBack.onFailed(tag, e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { final String result = response.body().string(); // 请求成功之后做解析,通过自己的回调接口将数据返回回去 handler.post(new Runnable() { @Override public void run() { Object o; if (TextUtils.isEmpty(result)) { o = null; } else { o = GsonUtils.getInstance().fromJson(result, cls); } callBack.onSuccess(tag, o); } }); } }); } }适配器继承自己的ViewHolderpackage com.bwie.mvpokrecyclerview.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bwie.mvpokrecyclerview.R; import com.bwie.mvpokrecyclerview.entity.NewsBean; import java.util.List; /** * Created by WuXirui * Create Time: 2017/11/9 * Description: */ public class NewsListAdapter extends RecyclerView.Adapter<NewsListAdapter.ViewHolder> { private Context context; private List<NewsBean> list; public NewsListAdapter(Context context, List<NewsBean> list) { this.context = context; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = View.inflate(context, R.layout.item_news, null); ViewHolder holder = new ViewHolder(v); return holder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Glide.with(context).load(list.get(position).getThumbnailPic01()).into(holder.imgLogo); holder.txtTitle.setText(list.get(position).getTitle()); holder.txtTime.setText(list.get(position).getDate()); } @Override public int getItemCount() { if (list == null) { return 0; } return list.size(); } class ViewHolder extends RecyclerView.ViewHolder { private ImageView imgLogo; private TextView txtTitle; private TextView txtTime; public ViewHolder(View itemView) { super(itemView); imgLogo = (ImageView) itemView.findViewById(R.id.img_logo); txtTitle = (TextView) itemView.findViewById(R.id.txt_title); txtTime = (TextView) itemView.findViewById(R.id.txt_time); } } }实现效果图