android 使用Recycleview完成复杂布局
做项目时首页模块的布局一般都是比较复杂的 xml文件会写的很多 各种嵌套比较复杂 用Recycleview实现的话比较简单一点
实现思路呢 用Recycleview的多布局 来展示不同条目内容 但是 请求的数据传入适配器很难受 所以我是把适配器写在Activity中
public class Demo extends BaseActivity{
private TitleBar mTitleBar;
private RecyclerView mRecycle;
private ArrayList<Integer> items;
private ArrayList<String> strings;
private ArrayList<String> list;
private View mLinear;
private TextView mSubscribe;
private ArrayList<String> urlLists;
@Override
protected int getLayoutId() {
return R.layout.fragment_recruit;
}
@Override
public void initView() {
mLinear = findViewById(R.id.mLinear);
mRecycle = findViewById(R.id.mRecycle);
mTitleBar = findViewById(R.id.mTitleBar);
mSubscribe = findViewById(R.id.mSubscribe);
mTitleBar.setBackgroundColor(R.drawable.title_background);
}
@Override
public void initData() {
urlLists = new ArrayList<>();
urlLists.add("https://img03.sogoucdn.com/app/a/100520024/c25c07885f822d67c91256b3033749e7");
urlLists.add("https://img04.sogoucdn.com/app/a/100520024/ee6b8a48e6322e18a85a62ddcb01f432");
urlLists.add("https://img01.sogoucdn.com/app/a/100520024/ebb532d5da0e26e285ac2dc025bc99ec");
urlLists.add("https://img01.sogoucdn.com/app/a/100520024/83922cd9e4aaf9b4c012f08629a5e160");
strings = new ArrayList<>();
for (int o = 0; o < 50; o++) {
strings.add("测试" + o);
}
items = new ArrayList<>();
for (int i = 1; i < 4; i++) {
items.add(i);
}
mRecycle.setLayoutManager(new LinearLayoutManager(getBaseContext()));
mRecycle.setAdapter(new Recruit_Adapter());
}
class Recruit_Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if (i == 1) {
View v = LayoutInflater.from(getBaseContext()).inflate(R.layout.viewholder_banner, null);
return new Recruit_bannerHolder(v,Demo.this);
} else if (i == 2) {
View v = LayoutInflater.from(getBaseContext()).inflate(R.layout.viewholder_tablayout, null);
return new Recruit_TabHolder(v);
} else {
View v = LayoutInflater.from(getBaseContext()).inflate(R.layout.viewholder_recycleview, null);
return new Recruit_RecycleHolder(v);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof Recruit_bannerHolder) {
Recruit_bannerHolder homeBannerHolder = (Recruit_bannerHolder) viewHolder;
homeBannerHolder.setBanner(urlLists);
} else if (viewHolder instanceof Recruit_TabHolder) {
Recruit_TabHolder homeTabHolder = (Recruit_TabHolder) viewHolder;
homeTabHolder.setTablayout(list);
} else {
Recruit_RecycleHolder homeRecycleHolder = (Recruit_RecycleHolder) viewHolder;
if (strings != null && strings.size() != 0) {
homeRecycleHolder.setlist(strings);
}
}
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public int getItemViewType(int position) {
return items.get(position);
}
}
}
ViewHolder类
public class Recruit_RecycleHolder extends RecruitAdapter.ViewHolder{
private ArrayList<String> list;
private final RecruitAdapter myadapter;
public Recruit_RecycleHolder(View itemView) {
super(itemView);
Context context = itemView.getContext();
RecyclerView mRecycle = itemView.findViewById(R.id.mRecycle_recruit);
mRecycle.setLayoutManager(new LinearLayoutManager(context));
myadapter = new RecruitAdapter(list, context);
mRecycle.setAdapter(myadapter);
}
public void setlist(ArrayList<String> list) {
if(myadapter != null && list != null){
myadapter.replaceAll(list);
}
}
}
item中Recycleview中的适配器
public class RecruitAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<String> lis;
private Context context;
public RecruitAdapter(List<String> lis, Context context) {
this.lis = lis == null ? new ArrayList<String>() : lis;
this.context = context;
}
public void replaceAll(List<String> starList) {
this.lis.clear();
this.lis.addAll(starList);
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.present_item, null);
return new ViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
ViewHolder mviewHolder = (ViewHolder) viewHolder;
if (i==0){
((ViewHolder) viewHolder).mView.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return lis.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mText_title,mText_address,mText_state,mText_time,mText_date;
private final View mView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}