要实现的效果:
Android RecyclerView 子条目(item)嵌套 RecyclerView_第1张图片

MainActivity核心代码:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);mTvRecycler.setLayoutManager(layoutManager);mMyRecyclerViewAdapter = new MyRecyclerViewAdapter(TvStationActivity.this,mList);//给RecyclerView设置适配器mTvRecycler.setAdapter(mMyRecyclerViewAdapter);

activity_main.xml 布局:

<?xml version="1.0" encoding="utf-8"?>        

Adapter 适配器:外层RecyclerView

/** * @author 小红妹 * @date 2018/10/20. * @describe * @copyright  */public class MyRecyclerViewAdapter extends RecyclerView.Adapter {    private Context mContext;    private List mDatas;    private ItemViewHolder holder;    private ItemRecyclerViewAdapter mItemRecyclerViewAdapter;    public MyRecyclerViewAdapter (Context pContext,List data){        this.mContext = pContext;        this.mDatas = data;    }    class ItemViewHolder extends RecyclerView.ViewHolder {        TextView mTextView;        RecyclerView mRecyclerView;        ItemViewHolder(View itemView) {            super(itemView);            mTextView = itemView.findViewById(R.id.tv_recycler_name);            mRecyclerView = itemView.findViewById(R.id.tv_recycler_view);        }    }    @NonNull    @Override    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        //LayoutInflater.from指定写法        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_content, parent, false);        //holder = new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_content, parent, false));        return new ItemViewHolder(v);    }    @Override    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {        holder.mTextView.setText(mDatas.get(position));        holder.mRecyclerView.setHasFixedSize(true);        holder.mRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 4,                GridLayoutManager.VERTICAL, false));        mItemRecyclerViewAdapter = new ItemRecyclerViewAdapter(position);        holder.mRecyclerView.setAdapter(mItemRecyclerViewAdapter);        drawRecyclerView();    }    @Override    public int getItemCount() {        return mDatas.size();    }    /**     * RecyclerView 内层点击事件方法     */    private void drawRecyclerView() {        //RecyclerView点击事件        mItemRecyclerViewAdapter.setOnItemClickListener(new ItemRecyclerViewAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(mContext, ""+position, Toast.LENGTH_SHORT).show();            }        });    }}

RecyclerView外层布局item_home_content.xml

<?xml version="1.0" encoding="utf-8"?>            

Adapter 适配器:内层RecyclerView

/** * @author 小红妹 * @date 2018/10/20. * @describe * @copyright */public class ItemRecyclerViewAdapter extends        RecyclerView.Adapter implements View.OnClickListener {    private int mInt;    private Home mHome;    private List mHomes;    private String[] localTV = new String[]{            "湖南卫视", "江苏卫视", "浙江卫视", "东方卫视",            "北京卫视", "安徽卫视", "山东卫视", "深圳卫视",            "江西卫视", "黑龙江台", "广东卫视", "天津卫视",            "湖北卫视", "河北卫视", "重庆卫视", "东南卫视",            "甘肃卫视", "广西卫视", "贵州卫视", "河南卫视",            "吉林卫视", "辽宁卫视", "旅游卫视", "内蒙古台",            "宁夏卫视", "青海卫视", "四川卫视", "陕西卫视",            "山西卫视", "新疆卫视", "西藏卫视", "云南卫视",            "南方卫视", "香港卫视", "凤凰中文", "凤凰资讯"};    private String[] cctv = new String[]{            "CCTV1", "CCTV2", "CCTV3", "CCTV4",            "CCTV5", "CCTV5+", "CCTV6", "CCTV7",            "CCTV8", "CCTV9", "CCTV10", "CCTV11",            "CCTV12", "CCTV13", "CCTV14", "CCTV15",            "央视音乐", "央视军事", "央视新闻", "央视少儿"};    private String[] mLocal = new String[]{            "广州新闻", "广州经济", "广州少儿", "广州综合",            "广东新闻", "南方卫视", "南方经济", "广东珠江",            "南方影视", "南方综艺", "深圳都市", "深圳公共",            "金华公共", "温州经济", "温州都市", "嘉兴综合"};    private String[] mSports = new String[]{            "CCTV5", "CCTV5+", "广东体育", "五星体育",            "北京体育", "风云足球", "广州竞赛", "欧洲足球"};    private String[] mMusic = new String[]{            "华龙直播", "经典串烧", "伤感男人", "发烧慢摇",            "汽车大碟", "酒吧慢摇", "激情舞曲", "电音舞曲"};    private String[] mFilm = new String[]{            "央视电影", "家庭剧场", "喜剧电影", "动作电影",            "经典剧场", "热播电视", "都市剧场", "经典大片"};    private String[] mCartoon = new String[]{            "嘉佳卡通", "北京卡酷", "金鹰卡通", "炫动卡通"};    //新建一个私有变量用于保存用户设置的监听器    private OnItemClickListener mOnItemClickListener = null;    //set方法:    public void setOnItemClickListener(OnItemClickListener listener) {        this.mOnItemClickListener = listener;    }    @Override    public void onClick(View v) {        if (mOnItemClickListener != null) {            //注意这里使用getTag方法获取position            mOnItemClickListener.onItemClick(v,(int)v.getTag());        }    }    //define interface 自定义一个接口    public static interface OnItemClickListener {        void onItemClick(View view, int position);    }    public ItemRecyclerViewAdapter(int pI){        mHomes = new ArrayList<>();        //holder.mView.setText(localTV[i]);        if (pI == 0) {            for (int i = 0; i < localTV.length; i++) {                mHome = new Home();                mHome.setName(localTV[i]);                mHomes.add(mHome);            }        }if (pI == 1) {            for (int i = 0; i < cctv.length; i++) {                mHome = new Home();                mHome.setName(cctv[i]);                mHomes.add(mHome);            }        }if (pI == 2) {            for (int i = 0; i < mLocal.length; i++) {                mHome = new Home();                mHome.setName(mLocal[i]);                mHomes.add(mHome);            }        }if (pI == 3) {            for (int i = 0; i < mSports.length; i++) {                mHome = new Home();                mHome.setName(mSports[i]);                mHomes.add(mHome);            }        }if (pI == 4) {            for (int i = 0; i < mMusic.length; i++) {                mHome = new Home();                mHome.setName(mMusic[i]);                mHomes.add(mHome);            }        }if (pI == 5) {            for (int i = 0; i < mFilm.length; i++) {                mHome = new Home();                mHome.setName(mFilm[i]);                mHomes.add(mHome);            }        }if (pI == 6) {            for (int i = 0; i < mCartoon.length; i++) {                mHome = new Home();                mHome.setName(mCartoon[i]);                mHomes.add(mHome);            }        }    }    @NonNull    @Override    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_head,null);        //将创建的View注册点击事件        view.setOnClickListener(this);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {        holder.mView.setText(mHomes.get(position).getName());        //将position保存在itemView的Tag中,以便点击时进行获取        holder.itemView.setTag(position);    }    @Override    public int getItemCount() {        return mHomes.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        TextView mView;        public MyViewHolder(View itemView) {            super(itemView);            mView = itemView.findViewById(R.id.tv_name);        }    }}

RecyclerView内层布局item_home_head.xml

<?xml version="1.0" encoding="utf-8"?>        

更多相关文章

  1. 猎头职位【互联网热招岗位整理—Android】北京/上海/广州/苏州
  2. 广州沙龙和微信、酷狗 欢聚时代的 Android 开发工程师一起交流分
  3. 【早读汇】广州@mogeWCY的《实战ES2015》笔记
  4. 【招聘】广州37游戏招初/中级前端工程师
  5. 【招聘】广州百田招前端
  6. 【Java】广州三本秋招之路
  7. 广州朋友注意“蓝&白”快餐店:前客剩粥加新粥端给后客

随机推荐

  1. android 模拟器获得root 权限
  2. android 8.1 mtk fota差分包指令
  3. RelativeLayoutd 的属性
  4. [React Native Android(安卓)安利系列]RN
  5. [Android]读取properties配置文件.
  6. Cocos2dx android build shell file
  7. Android锁屏及监听锁屏事件
  8. android上传文件
  9. android 启动延迟加载画面
  10. Android 创建单独的服务运行在后台(无界面