今天给大家看一个recyclerview多布局的写法,是tablayout是的写法在上一篇文章中,感兴趣的兄弟可以去看看学一学
这里是动图的地址http://qcloudcos.xunjiepdf.com/xunjievideo/temp/202205111401/45fc6ee39cf44fd5a6adb7e34b489835/video1_1.gif
我们废话不多说,直接上我们最喜欢的代码
添加一下我们的依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.github.bumptech.glide:glide:4.8.0'//glide第三方图片加载所需要的包
然后写我们的recyclerview布局
然后在我们的Activity或者Fragment中拿到我们的控件,我这边是在fragment中写的
package com.example.map.ui.fragment;
import android.content.Context;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import com.example.map.R;
import com.example.map.adapter.MyAdapter;
import com.example.map.api.ApiService;
import com.example.map.bean.WallPaperResponse;
import com.llw.network.NetworkApi;
import com.llw.network.observer.BaseObserver;
import com.llw.network.utils.KLog;
import com.yalantis.phoenix.PullToRefreshView;
import java.util.ArrayList;
import java.util.List;
public class Fragment1 extends Fragment {
private View view;
private RecyclerView mRecyclerView;
private List list;
private MyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.frament_1, container, false);
initView();
return view;
}
private void initView() {
mPullToRefresh = view.findViewById(R.id.pull_to_refresh);
mRecyclerView = view.findViewById(R.id.recyclerview);
//创建集合
list = new ArrayList<>();
//创建适配器
adapter=new MyAdapter(list,getActivity());
//创建布局管理器
LinearLayoutManager LayoutManager= new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(LayoutManager);
//添加适配器
mRecyclerView.setAdapter(adapter);
//访问网络
requestNetwork();
}
private void requestNetwork() {
NetworkApi.createService(ApiService.class)
.getWallPaper()
.compose(NetworkApi.applySchedulers(new BaseObserver() {
@Override
public void onSuccess(WallPaperResponse wallPaperResponse) {
List vertical = wallPaperResponse.getRes().getVertical();
if (vertical != null && vertical.size() > 0) {
//把请求的数据添加到我们的集合中然后刷新适配器
list.addAll(vertical);
adapter.notifyDataSetChanged();
} else {
Toast.makeText(getActivity(), "数据为空", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Throwable e) {
KLog.e("MainActivity", e.toString());
Toast.makeText(getActivity(), "访问失败", Toast.LENGTH_SHORT).show();
}
}));
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
public static Fragment1 newInstance() {
Fragment1 fragment1 = new Fragment1();
return fragment1;
}
}
接下来是我们的适配器
package com.example.map.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.example.map.R; import com.example.map.bean.WallPaperResponse; import java.util.List; public class MyAdapter extends RecyclerView.Adapter{ private List list; private Context context; //三个final分别代表三个不同的布局 public static final int ITEMONE = 1; public static final int ITEMTWO = 2; public static final int ITEMTHREE = 3; public MyAdapter(List list, Context context) { this.list = list; this.context = context; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) { //这时候就要根据这个i来判断加哪一个布局了 View inflate = null; RecyclerView.ViewHolder viewHolder = null; switch (i) { case ITEMONE: inflate = LayoutInflater.from(context).inflate(R.layout.rv_item, parent, false); viewHolder = new OneItemHolder(inflate); break; case ITEMTWO: inflate = LayoutInflater.from(context).inflate(R.layout.item_two, parent, false); viewHolder = new TwoItemHolder(inflate); break; case ITEMTHREE: inflate = LayoutInflater.from(context).inflate(R.layout.item_three, parent, false); viewHolder = new ThreeItemHolder(inflate); break; } return viewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { //如果当前的 holder 属于 OneItemHolder 则执行 if (holder instanceof OneItemHolder){ Glide.with(context).load(list.get(position).getImg()).into(((OneItemHolder) holder).image); }else if(holder instanceof TwoItemHolder){ Glide.with(context).load(list.get(position).getImg()).into(((TwoItemHolder) holder).image1); Glide.with(context).load(list.get(position).getImg()).into(((TwoItemHolder) holder).image2); }else if (holder instanceof ThreeItemHolder){ Glide.with(context).load(list.get(position).getImg()).into(((ThreeItemHolder) holder).image1); Glide.with(context).load(list.get(position).getImg()).into(((ThreeItemHolder) holder).image2); Glide.with(context).load(list.get(position).getImg()).into(((ThreeItemHolder) holder).image3); } } @Override public int getItemCount() { return list.size(); } @Override public int getItemViewType(int position) { if (position % 3 == 0) { return ITEMTHREE; } else if (position % 2 == 0) { return ITEMTWO; } else { return ITEMONE; } } private class OneItemHolder extends RecyclerView.ViewHolder { private ImageView image; public OneItemHolder(View itemView) { super(itemView); image = itemView.findViewById(R.id.iv_img); } } private class TwoItemHolder extends RecyclerView.ViewHolder { private ImageView image1; private ImageView image2; public TwoItemHolder(View itemView) { super(itemView); image1 = itemView.findViewById(R.id.iv_img1); image2 = itemView.findViewById(R.id.iv_img2); } } private class ThreeItemHolder extends RecyclerView.ViewHolder { private ImageView image1; private ImageView image2; private ImageView image3; public ThreeItemHolder(View itemView) { super(itemView); image1 = itemView.findViewById(R.id.iv_img1); image2 = itemView.findViewById(R.id.iv_img2); image3 = itemView.findViewById(R.id.iv_img3); } } }
然后是适配器中的三种布局样式
然后这个就是我们的多布局的样式了项目中的网络请求是我自己封装的一个请求,到时候可以给大家发出来



