`
mypyg
  • 浏览: 545286 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android在Listview中使用EditText

阅读更多
这一段写一个小程序,有某个界面需要编辑较多的数据,于是用了一个Listview,将EditText放进去用来做编辑控件,遇到了下面的情况:
1.屏幕内容滚动时会调用ListView的Adapter的getView()重新产生View,这就要求及时保存EditText中的数据,不然会丢失,使用了Listener监听EditText的TextChange,但是发现Listener经常不被调用,跟踪发现在getView()中创建的Edittext和ListView中用来显示的EditText句柄不一样
2.再次就是当软键盘弹出后,焦点从当前输入的EditText丢失,移动了第一个EditText上,屏幕直接来个大滚屏。。。根本没法使用。

观察手机上的联系人,也是一列EditText,就没有这些现象,直接打开源码去看。
里面互相引用,看的头大,开始带着印象去找其布局中使用的ListView,居然没找到,一头雾水。直到吃饭时才猛然反应过来,看到了ScrollView,其使用的是ScrollView+竖向LineLayout,一下把这些问题都避免了。只是LineLayout中的内容是动态生成的。

遂改。

Listview的demo文件改的惨不忍睹,日后整理了再上传。

结论:当界面元素不多时可以使用ScrollView+linearLayout来实现ListView效果。
当包含的元素很多,每个元素的界面又在不停改变或者元素的数量在动态改变时就只能用ListVIew了。
2
2
分享到:
评论
11 楼 xiaodousa 2014-11-13  
9楼正解!
10 楼 zxyzss 2014-01-16  
求代码,大神,278123853@qq.com  谢谢
9 楼 fyc0109 2013-12-13  
用ListView 不要重用ConvertView
8 楼 lmm90 2013-06-08  
lz,发个源码看看,正用到,搞了一天了,谢谢。邮箱:550662147@qq.com
7 楼 gundumw100 2013-04-22  
该问题的确非常恶心。
看这个可能会帮助你
http://blog.sina.com.cn/s/blog_80f8936801012cp7.html

事实上,ListView中含有CheckBox的话,也会有这样的问题。
可以通过引入一个中间变量记录一下EditText中的内容,然后再赋值,就是繁琐的很!
或者ScollView+ListView一次性将ListView中的item全部显示出来,虽然也不是好主意!
6 楼 wangyezidong 2012-09-04  
mypyg 写道
wangyezidong 写道
当我有linearlayout中有许多edittext的时候,当EditText改变时,更新后台数据,怎么获取是第几个EditText啊??


setTag函数做个标记,再通过getTag获取标记来判断。

你好,这个我已经解决了,也是用的tag
5 楼 mypyg 2012-08-31  
wangyezidong 写道
当我有linearlayout中有许多edittext的时候,当EditText改变时,更新后台数据,怎么获取是第几个EditText啊??


setTag函数做个标记,再通过getTag获取标记来判断。
4 楼 wangyezidong 2012-08-27  
当我有linearlayout中有许多edittext的时候,当EditText改变时,更新后台数据,怎么获取是第几个EditText啊??
3 楼 幽奇猫 2011-08-26  
我也正在弄这个问题。
看了你的描述,也有了点启发。不过现在还没解决。没看到你的代码,想参考一下哎。
2 楼 trainbow 2011-02-18  
楼主,我也遇到同样的问题

2.再次就是当软键盘弹出后,焦点从当前输入的EditText丢失

如果不改变listview可以解决吗……
1 楼 qianjigui 2010-12-28  
看到你的描述,我有很多启发,并找到了一个比较好的方法。

利用ListView的getChildAt方法可以获得UI中输入的数据值。

我觉得可以换个思路考虑这个问题,就是说SimpleAdapter这类的东西是在初始化时被ListView调用。在需要最终获取结果时,我们就直接查找ListView含有的View。

相关推荐

Global site tag (gtag.js) - Google Analytics