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);

        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值