1、依赖,权限
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com.google.code.gson:gson:2.8.2' compile 'com.github.bumptech.glide:glide:3.5.2'
<uses-permission android:name="android.permission.INTERNET"/>
2、布局
activity_layout、
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/rv"> </android.support.v7.widget.RecyclerView>
item、
<ImageView android:layout_width="match_parent" android:layout_height="100dp" android:id="@+id/iv" android:src="@mipmap/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:textSize="20sp" android:text="1111" />
3、News(封装接口数据)
4、OkhttpUtils(网络请求数据接口类)
import android.os.Handler; import android.os.Message; import com.google.gson.Gson; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class OkhttpUtils { private Handler hand=new Handler(); private NetDataCallback netDataCallback; public <T>void getdata(String url, final NetDataCallback netDataCallback, final Class<T> tclass) { //初始化一个 OkHttpClient 并且设置连接和读取超时时间 OkHttpClient okhttp=new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .build(); Request request=new Request.Builder().url(url).build(); Call call = okhttp.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { netDataCallback.fail(499,e.getMessage()); } //请求成功 @Override public void onResponse(Call call, Response response) throws IOException { Gson gson=new Gson(); T t = gson.fromJson(response.body().string(), tclass); final Message msg = Message.obtain(); /*msg.what=ok;*/ msg.obj=t; hand.post(new Runnable() { @Override public void run() { netDataCallback.success(msg.obj); } }); } }); } }
5、NetDataCallback(接口类)
public interface NetDataCallback<T> { void success(T t); void fail(int code,String str); }
6、Myadapter(适配器)
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.bumptech.glide.Glide; import java.util.ArrayList; public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private ArrayList<News.DataBean> mlist=new ArrayList<News.DataBean>(); private Context mcontext; public Myadapter(ArrayList<News.DataBean> mlist, Context mcontext) { this.mlist = mlist; this.mcontext = mcontext; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(mcontext); View view = inflater.inflate(R.layout.item, parent, false); RecyclerView.ViewHolder holder=null; holder=new ViewHolder(view); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //先进行强转 ViewHolder holder1 = (ViewHolder) holder; //绑定数据 holder1.tv.setText(mlist.get(position).getContent()); Glide.with(mcontext).load(mlist.get(position).getUser().getIcon()).into(holder1.iv); } @Override public int getItemCount() { return mlist==null?0:mlist.size(); } //定义一个ViewHolder class ViewHolder extends RecyclerView.ViewHolder{ private TextView tv; private ImageView iv; public ViewHolder(View itemView) { super(itemView); tv=(TextView)itemView.findViewById(R.id.tv); iv=(ImageView)itemView.findViewById(R.id.iv); } } }
7、MainActivity
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements NetDataCallback<News> { private Myadapter md; private ArrayList<News.DataBean> mlist; private RecyclerView mrv; private OkhttpUtils mutils; private String url = "https://www.zhaoapi.cn/quarter/getJokes?page=1&token=22DEA5174137AE5352E8A7A606C8EA06&source=android&appVersion=101"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mrv = (RecyclerView) findViewById(R.id.rv); //开始进行网络请求 initdata(); } //网络请求 private void initdata() { mutils = new OkhttpUtils(); mutils.getdata(url, this, News.class); } @Override public void success(News news) { //得到集合类(这一步千万不能落下,否则得不到数据) mlist = (ArrayList<News.DataBean>) news.getData(); //设置适配器 md = new Myadapter(mlist, this); //LinearLayout管理器(线性布局管理器) // 1、mrv.setLayoutManager(new LinearLayoutManager(this)); /* * (1)Context * (2)方向,上面的是水平方向,还可以选择垂直方向LinearLayoutManager.VERTICAL * (3)是否颠倒循序,这个是针对数据源的,就是把你传进去的数据进行倒着显示,比如你穿进去的集合是{1,2,3,4},那么这个参数为false的时候,显示的是1,2,3,4,但是如果你选择的是true,显示的是4,3,2,1。 * */ //2、mrv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); /* * GridLayout管理器(网格布局管理器) * (1)Context (2)显示多少列 */ // 1、 mrv.setLayoutManager(new GridLayoutManager(this,2)); /* * 瀑布流布局管理器(StaggeredLayouManager): * (1)Context (2)显示列数 * */ mrv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); //设置分割线 mrv.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); //设置适配器 mrv.setAdapter(md); } @Override public void fail(int code, String str) {} }