获取网络数据实现RecyclerView多条目
先上效果图:
接口地址:http://365jia.cn/news/api3/365jia/news/headline?page=2
1、MainActivity代码
public class MainActivity extends AppCompatActivity { private static final int SUCCESS = 1; private static final int FALL = 2; private String path = "http://365jia.cn/news/api3/365jia/news/headline?page=2"; private RecyclerView recyclerView; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //判断如果成功就进行解析并展示数据 if(msg.what==SUCCESS){ String s = (String) msg.obj; Gson gson = new Gson(); List<UserBean.DataBeanX.DataBean> list = gson.fromJson(s, UserBean.class).getData().getData(); recyclerView.setAdapter(new MyBase(MainActivity.this,list)); } else if(msg.what == FALL){ Toast.makeText(MainActivity.this, "获取网络失败", Toast.LENGTH_SHORT).show(); } else{} } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recy); //一定得设置布局管理器 recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false)); getdata(); } //获取数据 private void getdata() { OkHttpClient client = new OkHttpClient.Builder().build(); Request request = new Request.Builder().url(path).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { handler.sendEmptyMessage(FALL); } @Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); Message msg = Message.obtain(); msg.obj = s; msg.what = SUCCESS; handler.sendMessage(msg); } }); } }
2、ImageLoader
3、RecyclerView适配器
//多条目时此处不用类名调用ViewHodler public class MyBase extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int FLAG = 0; private static final int FLOW = 1; private Context context; private List<UserBean.DataBeanX.DataBean> list; public MyBase(Context context, List<UserBean.DataBeanX.DataBean> list) { this.context = context; this.list = list; } DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式 .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式 .build(); // 获取item类型 @Override public int getItemViewType(int position) { //判断集合中的图片地址数量小于3 就返回FLAG 否则返回FLOW if (list.get(position).getPics().size()<3){ return FLAG; }else { return FLOW; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==FLAG){ ViewHolder1 holder1 = new ViewHolder1(View.inflate(context, R.layout.item_base, null)); return holder1; }else{ ViewHolder2 holder2 = new ViewHolder2(View.inflate(context, R.layout.item_base2, null)); return holder2; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)){ case FLAG: ViewHolder1 holder1 = (ViewHolder1) holder; holder1.item_title.setText(list.get(position).getTitle()); holder1.item_comment.setText("评论"+list.get(position).getComment_amount()); holder1.item_like.setText(list.get(position).getViews()+"赞"); ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/"+list.get(position).getPics().get(0),holder1.item_image,options); break; case FLOW: ViewHolder2 holder2 = (ViewHolder2) holder; holder2.item_title.setText(list.get(position).getTitle()); holder2.item_comment.setText("评论"+list.get(position).getComment_amount()); holder2.item_like.setText(list.get(position).getViews()+"赞"); ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/"+list.get(position).getPics().get(0),holder2.item_image,options); ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/"+list.get(position).getPics().get(1),holder2.item_image1,options); ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/"+list.get(position).getPics().get(2),holder2.item_image2,options); break; } } public class ViewHolder1 extends RecyclerView.ViewHolder { private final TextView item_title; private final TextView item_like; private final TextView item_comment; private final ImageView item_image; public ViewHolder1(View itemView) { super(itemView); item_title = (TextView) itemView.findViewById(R.id.item_title); item_like = (TextView) itemView.findViewById(R.id.item_like); item_comment = (TextView) itemView.findViewById(R.id.item_comment); item_image = (ImageView) itemView.findViewById(R.id.item_image); } } public class ViewHolder2 extends RecyclerView.ViewHolder { private final TextView item_title; private final TextView item_like; private final TextView item_comment; private final ImageView item_image; private final ImageView item_image1; private final ImageView item_image2; public ViewHolder2(View itemView) { super(itemView); item_title = (TextView) itemView.findViewById(R.id.item_title); item_like = (TextView) itemView.findViewById(R.id.item_like); item_comment = (TextView) itemView.findViewById(R.id.item_comment); item_image = (ImageView) itemView.findViewById(R.id.item_image); item_image1 = (ImageView) itemView.findViewById(R.id.item_image2); item_image2 = (ImageView) itemView.findViewById(R.id.item_image3); } } @Override public int getItemCount() { return list.size(); } }
————————————————————————————————————————————————————
单图片Item XML布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginLeft="65dp" android:layout_marginStart="65dp" android:layout_marginTop="23dp" android:text="TextView" /> <ImageView android:id="@+id/item_image" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignLeft="@+id/item_title" android:layout_alignStart="@+id/item_title" android:layout_below="@+id/item_title" android:layout_marginTop="13dp" app:srcCompat="@mipmap/ic_launcher" /> <TextView android:id="@+id/item_comment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/item_image" android:layout_alignStart="@+id/item_image" android:layout_below="@+id/item_image" android:text="TextView" /> <TextView android:id="@+id/item_like" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/item_comment" android:layout_marginLeft="24dp" android:layout_marginStart="24dp" android:layout_toEndOf="@+id/item_comment" android:layout_toRightOf="@+id/item_comment" android:text="TextView" /> </RelativeLayout>
三张图片Item XML的布局:
<?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" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginLeft="65dp" android:layout_marginStart="65dp" android:layout_marginTop="23dp" android:text="TextView" /> <LinearLayout android:layout_below="@id/item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" > <ImageView android:id="@+id/item_image2" android:layout_width="100dp" android:layout_height="100dp" app:srcCompat="@mipmap/ic_launcher" /> <ImageView android:id="@+id/item_image3" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginLeft="30dp" app:srcCompat="@mipmap/ic_launcher" /> <ImageView android:id="@+id/item_image" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginLeft="30dp" app:srcCompat="@mipmap/ic_launcher" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" > <TextView android:id="@+id/item_comment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/item_like" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:text="TextView" /> </LinearLayout> </LinearLayout>