活用数据变量轻松运用RecyclerView嵌套制作多列表图片上传

最近一段时间公司工作太忙了,而且加上自己比较懒,很少更新知识和文章了。到了年后公司平时很多一起玩的同事都要离职了,心情也不太好,很多小伙伴都要辞职另谋出路,经常面试得到一些不太好安卓行情的信息,让我必须面对现实,慢慢找回学习的状态!

好了,不瞎扯什么了,接到公司的任务一个图片上传的app需求,所以我又一次踏上了写活用RecyclerView的道路,下面我们先看看效果:

效果演示

GIF的操作有点快,我们下面来详细分析一下需求:

image

1. 我们要根据后台传回来的数据,动态生成每一个图片选项卡;

2. 每个图片选项卡都可以点击拍照;

3. 可以任意添加和删除各个图片,并且上传数据。

看到这样的需求,很多人就会想,哎呀,这个简单了,用那个框架、哪个框架就能轻松做到以上的事情。我个人呢,比较喜欢用自己的思路化难为简。

解决问题的一开始,我的思路是用嵌套的RecyclerView来解决,想着想着有点懵圈了,因为有几个难点我要去克服:

1. 图片拍照需要onActivityResult,我怎么在adapter里面完成,写个接口?

2. 如何在第一层adapter里面控制第二层adapter的数据的增加和删除呢?事实上这个想法最后的试验失败就是由于在这里的数据处理老是出问题而不了了之;

第一次的想法失败,我就想难道嵌套的RecyclerView我是驾驭不了的吗。当我想放弃的时候,我自己就想起了以前师兄经常跟我说的一句话:“adapter是只是用来显示数据的,我们要尽量少的在adapter里面做处理逻辑的事情”,想到这句话,突然我就开窍了一样,想到另一种方法,就是把嵌套的adapter看成是一个只显示数据,而不处理数据的地方,我们应该把重点放在处理和改变数据,来改变adapter的显示。下面我们详细来讲讲这种思路,没兴趣听我吹牛逼的同学可以直接去下载源码看看源码下载

1. 首先,我们来看看后台返回来的配置菜单数据是怎么样的,动态生成图片选项卡

先说明
一些关键的变量


image

image

image

image
image

当拿到这些数据,我们首先就是先动态的生成图片的选项卡:

image

我们生成了所需要的JavaBean,有同学会说为什么会多了一个photoList的呢,传回来的数据明明没有这个,你是不是没事找事做。这里我先不说,但是我只能说我加这个变量并没有喝醉酒。

好了,我们看看代码的处理:

if(phoneConfigBean.body.size > 0){
    for(i in phoneConfigBean.body.indices){
        if(!phoneConfigBean.body.get(i).id.isNullOrEmpty()){
            //把拿到的数据一个个放进list里面
            bodyBeanList.add(phoneConfigBean.body.get(i))
            //因为要控制添加图片add的按钮,所以我们先给每条list添加一个空的字符串
            bodyBeanList.get(i).photoList.add("")
        }
    }
    //刷新适配器
    mPhotoMenuAdapter.notifyDataSetChanged()
}else{

}

刷新完适配器,我们就基本做完第一步了:

image

我们根据数据动态生成了该有的图片选项卡了。

2. 灵活运用数据改变两层adapter的显示

下面就到了最重要的一步了,就是我们之前所说的核心部分,其实并不难,在第一步中,我们在JavaBean里面声明多了一个photoList终于要出场了,他可是主角,下面我们看看它怎么成为主角的:

image

我们要把整个第一层的adapter看成一个整体,不要单独的想第一层adapter里面的数据怎么单独处理。在第一层adapter里面即mPhotoMenuAdapter的onBindViewHolder里面把photoList直接就赋给了第二层adapter即PhotoAdapter,也就是说,PhotoAdapter只是负责显示photoList的数据就可以了,我们不用管在哪里处理了photoList的数据。无论photoList的数据在前面做了什么坏事,PhotoAdapter只需要在后面默默的显示phtotoList的数据就完事了,这样的话,我们就可以做到activity处理数据,adapter只负责显示数据这个理念了,即View与数据分离。

3. 增加一些拍照,和图片增加、删除的逻辑

1.增加点击事件(add按钮)

image

2.增加点击事件(删除图片数据)


image

image

好了,一看上去比较复杂的逻辑,其实可以用很简单的方法去实现。只要记住一句话,“adapter是只是用来显示数据的,我们要尽量少的在adapter里面做处理逻辑的事情”,所有问题都会迎刃而解。我一直想说,很多东西看上去很难,其实转换一下思维方式,再难的东西都是用简单的思路实现的。当然这个图片上传小框架是兼容安卓7.0以上系统的。好了,这一期就讲得差不多了,如果对我的代码有什么建议的同学可以跟我讨论一下,譬如说很多kotlin的问题我自己都没搞得懂~对我的项目有兴趣的同学可以下载我的源码一起学习和交流,共同进步!源码下载

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,520评论 25 707
  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 从Android 5.0...
    Rtia阅读 307,381评论 27 439
  • 每天学一点,一年365天,365点,也许就会有所不同,坚持!!!
    曾经相遇总胜过从未碰头阅读 187评论 0 0
  • 一天很短, 短得来不及拥抱清晨, 就已经手握黄昏! 一年很短, 短得来不及细品初春殷红 窦绿,就要打点素裹秋霜! ...
    叛逆的山峰阅读 172评论 0 0
  • 很多时候不逼自己一下,真不知道自己还能做这么多事。 对于身体,我们需要不断地“虐”,她才会更听话。对于心,则需要更...
    敬一深呼吸阅读 181评论 0 0