Android Studio:Intent、Bundle、RecyclerView、ListView的使用

一、 实验题目 

 Intent Bundle RecyclerView ListView的使用

【目的】

1.复习事件处理

2.学习Intent、Bundle在Activity跳转的应用

3.学习RecyclerView、ListView以及各类适配器的用法

二、 实现内容

要求的实现内容较多,此处便不再赘述,详情可见课程提供的实验文档。

三、 实验过程

先行说明:这次实验要求homepage用RecyclerView实现,但是由于我最初在看实验文档时不够仔细,直接先看文档下方的基础知识而不是实验要求,然后就先用ListView实现了,后面的功能做得差不多了才发现。由于临近ddl,就先将错且错了。下次实验再修改。

此次实验的主要文件目录如下:

 

activity_main.xml是主页列表和购物列表共同的布局文件(一个可见/一个不可见)

activity_0.xml是商品详情界面的布局文件。

 

MainActivity.java对应着activity_main.xml。

Main0Activity.java对应着activity_0.xml。

 接下来是整个实验的过程:

(1)基础设置

1 去掉标题栏

Android studio创建项目时,在AndroidManifest会默认如下↓

 

将values->style.xml中的设置改成如下↓ (DarkActionBar改为NoActionBar

 

2 在AndroidManifest里为新建的activity进行注册

 

开始实验时没有注册Main0Activity.java,导致每次在主页列表里点进商品详情时,整个APP直接闪退,百度了原因才知道自己连最基础的注册都不懂。(怪自己没好好听课)

(2)主页面列表和购物列表的布局实现

主页列表和购物列表共同的布局文件activity_main.xml,主要样式如下↓

 

首先对购物车列表的listview设置不可见,这样一打开APP直接可显示的只有主页列表。

 

以上是现在布局文件建立一个空的列表,接下来再创建新的xml来设计列表项组件的样式。

我先是为主页列表list创建了一个list.xml如下,第一个TextView表示每个列表项左边的首字母,background=“@drawable/shape”代表蓝色底部圆圈的样式,第二个TextView代表商品名称。类似地,我也为购物车列表创建了一个list_2.xml。

 

接下来在MainActivity.java里为主页列表list创建一个SimpleAdapter适配器。

 

先将所有商品首字母和名称逐一以哈希表形式储存在一个数组列表里,再将其作为第一个参数导入SimpleAdapter。实验文档里对创建SimpleAdapter所需的5个参数都有详细说明。


相似地,我也用同样方法为购物车列表创建了一个SimpleAdapter。

两者最终实现效果如下:

            

                                  (主页)                                 (添加商品后的购物车)

(3)悬浮按钮

首先根据自己的SDK版本添加依赖:

 → 

activity_main.xml添加控件:

先将其图标初始值设为“购物车小图标”:

接下来在MainActivity.java里对其绑定监听器,当点击悬浮按钮时,会先判断此时是主页列表处于可见状态还是购物车列表处于可见状态,判断完毕后将两者的visibility状态转换,同时也将按钮中间的icon图片换成另一张。

 

(4)商品详情页面

首先说下布局,虽然这次实验提倡使用RelativeLayout和LinearLayout,不过我还是更加习惯用之前的ConstrainLayout……

我设计的商品界面如下:

 

具体的布局实现方式不多赘述,详情直接看activity_0.xml文件。直接说下几个重点吧。

顶部占1/3的实现方式可以用gravity实现,只要gravity的值占总布局的gravity值的1/3即可。界面上部竖着的、横着的灰色直线都是用ImageView实现,只要设置好它们的长宽、位置以及background为灰色即可。界面下部的“一键下单/分享商品/……”是用ListView实现的,样式与适配器的创建方式与之前的主页/购物车列表是一样的。

另一个值得一提的ImageView便是商品图片左边的star图案。在商品页面activity_0.xml对应的Main0Activity.java里,先通过setTag(0)将star的tag初始值设为0,点击star图案后会判断其的tag值,从而实现star空心和实心的转换。

 

另外,商品详情页面的返回back图案和购物车car图案的点击事件我们待会再提。

(5)Intent事件

1 首先在主页列表和购物车列表点击某个商品,从而进入商品详情页面。此时便是通过建立一个intent,将所要传递的信息交给下一个页面:

 

以上是点击主页面列表进入商品详情页面的监听绑定器,通过position arg2获取点击的列表项,再获取该列表项的商品名称,作为参数以调用Into_Good函数。

 

在Into_Good函数里,建立一个intent,通过判断参数name来选择要传入哪些信息。

Into_Good函数最后:

利用此函数进行Activity间数据传递与回调。

(点击购物车列表里的商品项,实现方式与上面一样。)

2 通过intent,来到商品详情界面。通过getIntent()获得上个页面传递过来的信息,将这些信息显示在页面上,从而造就了各个不同商品的不同详情页面。

 

若是点击商品页面左上角的“>”返回标志,则直接利用finish( ),结束这个intent事件,返回上一页面。

 

若是点击商品页面右部的购物车图案,则建立一个新的intent,通过setResult( ),将所要传递的信息调给上一页面。

 

3 而上一页面,利用onActivityResult( )函数,接收到回调的信息,并且将该信息添加到购物车列表里,再用notifyDataSetChanged( )来更新列表。这便成功地将选中的商品添加到购物车里了。

 

(6)一些额外要实现的功能

1 长按主页列表某商品,将该商品移除。

 

2 长按购物车列表某商品,弹出一个alertDialog。

 

四、 实验思考及感想

1 在此先随便说几个我能想到的吧。

A 时刻要注意AndroidManifest和build.gradle的相关配置。

B 长按事件处理最好要有一个返回值true,否则会将把点击事件的结果一起返回。

C star标志,我最开始是在xml文件里将其tag设置为0,但是在activity里采取“switch...case 0...case 1”对其判断后,每次点击star图案,整个app直接闪退。后来才发现在activity里用getTag获取的是String类型,不能强制转换为int。后来直接在activity里设置初始tag值才解决。

D Intent事件,将string传给下一页面没有难度,不过如何将图片传给下一页面实在是不知道怎么弄。由于我的图片资源是放在drawable里,百度了好久又自己融合了下才找到解决的方案。如下。

First activity:

 

Second activity:

 

 

E 本来我的主页面和购物车页面是分开做的,所以利用intent传递回调一直不成功,因为我无法做到第1个页面(主页面)传递信息给第2个页面(商品详情页面),第2个页面又回调信息给第3个页面(购物车列表)。真的实在没法完成,于是我又照着网上教程,搞了半天的设置全局可调用的静态变量,想以此来将要传递的信息调成全局可用,结果还是不能成功。最后只能乖乖地将主页面和购物车页面合二为一了。

F 用C++比较多,在进行判断时总是会用成“= =”。但是在java里,“= =”只能判断地址是否相同,equals( )才能判断内容是否相同。

2 对比那些快速搞完project的同学以及他们漂漂亮亮的代码,感觉自己真的是咸鱼一条。自己本身的代码能力就比较薄弱,大二之后其实已经不大敲代码了,对java也是半生不熟。即使对着模板很认真地敲代码,尽心尽力将所有功能实现,但是最后整理代码打包文件时,还是会由衷觉得自己写得一团糟,毫无逻辑感,缺乏可看性。就像建一座小房子,事先没有画好设计图,想到哪便盖到哪,最后盖出一栋歪歪扭扭的小房子,勉强可以住人,但是不通风不透气,迟早会成为危房。



------------------------------------------------

2017/12/2

这篇实验报告还是在学习AS初期时候写的。现在返回来看那时的代码,emmm写的真的好乱好糟糕,而且数据都没有进行封存,劳神费力。

还好现在有所进步了,小小地夸奖一下自己。

猜你喜欢

转载自blog.csdn.net/reborncgy/article/details/78696425
今日推荐