-
多种控件的动态加载及返回值的获取——Android客户端练习功能的添加
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
一、初步思路
首先分析练习测试在web页的表现形式,发现练习测试这个活动不管是前端的的逻辑,还是后台数据库的设计都非常凌乱:前台还有不少BUG,后台数据库的设计也不合理,有5个字段是用来存答案的。如果在action里判断答案是哪个,然后转成字符串存到数据库就可以了。所以这里就给客户端的实现带了一定的麻烦。还有其他小毛病,就不一一说了。由此也看出,数据库的设计要慎重。
Android的技术还不太熟,所以只能是慢慢摸索的来做。
-
二、第一步
已把后台习题的数据返回到前台。因为涉及到3种题型,所以在Action里将数据存成3个JSONArray数组:单选,(JSONArray)jsra;多选,jscb;判断,jsdg;然后再存入JSONObject传到客户端,然后再解析成JSONObject使用。目前已完成习题基本信息的显示,下面的工作主要是显示题目信息并返回用户点击的数据。显示题目信息主要是在ListView里使用Adapter显示,这个还需要仔细琢磨下,包括数据的封装等细节问题。
--------------->12.16<---------------
数据的封装及传送到客户端已完成,且已尝试在ListView里使用多个Adapter:在getView()里使用If...else来判断传入题目的类型,再给予不同的控件。结果证明这样做是不行的,ListView只加载了一种控件,且这样的加载方式会给后面的返回数据带来很大的麻烦,所以现在拟采用另一种思路:将题目所涉及到的控件在布局文件里写死,将其visibility属性设置为none,如此,控件不可见且不占空间。之后再根据题目的数量用for循环来显示。今天做出来试试看效果。
--------------->12.17<---------------
终于把结果显示出来了,这中间犯了个比较低级的错误。因为一直想要达到控件重复使用的效果,使一个radio控件可以被每个题目的选项调用,所以使用hashmap将每一项作为一个单独的item存——却也因此因小失大——必须要使用RadioGroup才能达到单选的效果,RadioButton的话每加载一项都是一个单独的item。
之后将每一题中的所有信息都存入一个hashmap,再将hashmap存入list,再布局,最终才实现。
现在面临一个新的问题,ListView的加载方式使得数据无法保存,现在要试着重写相关的方法,使数据可以不被刷掉。
ListView的数据加载方式参见学习元:listview加载性能优化。
-
三、第二步
目前,用户操作数据的记录、显示已完成。
数据的记录是在adapter里使用RadioButton的oncheckedchange()函数来监听,新建checkList来存储,然后再在数据加载时的getView函数里使数据显示。虽然逻辑不复杂,但是这个还是花费了较长的时间,主要原因还是对组件的使用不熟悉,不知道一些函数。
最后的数据需要返回到activity里,这一步是在adapter里新建公共函数,再利用activity里的adapter实例来获取数据,最终完成数据传输。
下一步的工作是将多选题及判断题用同样的方式进行处理,然后将用户操作数据与标准答案对比并显示。多选题是checkbox控件,没有可用的公共函数,需要对每一个checkbox进行监听以获取数据;判断题则是和单选题同样的处理过程;最终的答案对比需要新建一个activity来显示。整体思路就是这样,里面可能会遇到一些细节上的问题,需要好好琢磨。
-
-
- 标签:
- 显示
- 数据
- 控件
- 动态
- 使用
- adapter
- 题目
- 加载
- listview
- 方式
- 完成
-
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~