• 多种控件的动态加载及返回值的获取——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条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部