AndroidDev 板


LINE

最近,我朋友问我怎麽用自订的ListView动态增减列, 刚好可以分享一下, 如果对如何自订ListView不了解, 可以参考一下#1DbiQ5jJ, 将代码贴到板上任何一个地方,就可以找到我上一篇文章:) 那麽如何利用自订的ListView来动态增加或删除呢? 我们首先利用Menu让使用者能够动态的增加或删除, 因此先在Menu里面加入两个选项,分别是add item及remove item, @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, Menu.FIRST, 0, "add item"); menu.add(0, Menu.FIRST+1, 0, "remove item"); return super.onCreateOptionsMenu(menu); } 就会看到这样的一个画面, http://uploadingit.com/file/jrlg3a2bwwykwkyo/menu1.png
接着我们想要按下add item的时候,让ListView多出一列, 在加入public boolean onOptionsItemSelected(MenuItem item) , 当你按下menu选项的处理事件, @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case Menu.FIRST: myAdapter.addItem(myAdapter.getCount()+1); break; case Menu.FIRST+1: break; } return super.onOptionsItemSelected(item); } 这时候,切换到MyAdapter.java的页面,新增两个方法,分别是: public void addItem(int position) public void removeItem(int position) 当按下add item的时候,就会呼叫addItem(), 而按下remove item的时候,就会呼叫removeItem(), 这时候我们的MyAdapter需要作一下变动, 还记得自订的ListView里面的getView()吗? 它是用来显示ListView所有的列,但是我们要将每一列存成一个一个的物件, 所以需要改变一下写法, 首先,宣告一个ArrayList来储存每一个列的View, private ArrayList<View> arrayList; 并且在建构子初始化它, arrayList = new ArrayList<View>(); 这时候就可以开始使用它了, 再来就是在getCount()的return变成arrayList的大小, @Override public int getCount() { // TODO Auto-generated method stub return arrayList.size(); } 接着将getView所有的内容搬到addItem()里面, public void addItem(int position){ TagView tag; View view = adapterLayoutInflater.inflate(R.layout.adapter, null); tag = new TagView( (Button)view.findViewById(R.id.AdapterButton), (ImageView)view.findViewById(R.id.AdapterImage), (TextView)view.findViewById(R.id.AdapterText)); view.setTag(tag); arrayList.add(view); tag.image.setBackgroundResource(R.drawable.icon); tag.button.setText("button"+arrayList.size()); tag.text.setText("text"+arrayList.size()); this.notifyDataSetChanged(); } 比较要注意的是arrayList.add(view); 我们每新增一列,就必须把那一列的view加入到arrayList里面, 最後的this.notifyDataSetChanged()是通知baseAdapter我们已经将资料更新了, 它就会执行getCount()取得列数并且重跑一次getView(), 在getView()这边我们只需要改变return值即可, @Override public View getView(int position, View view, ViewGroup parent) { // TODO Auto-generated method stub return arrayList.get(position); } 现在你可以跑看看程式,一开始什麽都没有,当按下Menu->add item, 就会跑出一列我们自订的ListView了, 接着我们来写remove item部份, 回到onOptionsItemSelected()这个函式, 在case Menu.FIRST+1:後面加入呼叫removeitem, case Menu.FIRST+1: myAdapter.removeItem(myAdapter.getCount()-1); break; 再到MyAdapter.java里面修改removeItem() public void removeItem(int position){ if(!arrayList.isEmpty()){ arrayList.remove(position); this.notifyDataSetChanged(); } } 到这里为止,我们就可以操作新增/删除的功能了, 如果成功就会出现下面的画面, http://uploadingit.com/file/hkqtqu1qure25r4o/menu2.png
http://uploadingit.com/file/cfbkdtpclgebrf3e/menu3.png
如果没有出现预期的结果,没关系, http://uploadingit.com/file/d5cr1yp8l0i1ykay/MyListView.zip 下载这个档案就可以看到所有的程式码, 其实我觉得这样的写法有点粗糙, 我比较偏向SimpleAdapter那样写, 可能需要在研究一下怎麽写比较好 如果有错误或有更好的写法 请务必告诉小弟,避免误导大家,谢谢。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.102.249







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP