android ListView实现类似Gallery的功能

  次阅读 作者:智能小宝 来源:互联网 2015-10-03 10:42 我要评论(0)

利用ListView,实现类似Android Gallery的功能。效果类似这样:

长按列表中元素:

勾选列表中元素,点击 选择 按钮:

点击删除按钮,则删掉所选元素:

再次长按屏幕中元素,按钮和多选框消失。另外,按系统回退按钮也可使按钮和多选框消失。如果没有多选框和按钮的时候,回退按钮将执行系统操作,退出应用。

实现这部分代码有几个难点:

长按界面中元素,所有元素都显示CheckBox,当然可以遍历所有元素(视图)并设置相应的CheckBox为visible,这样逻辑会比较乱,本例中使用了java提供的对观察者模式的支持类

删除其中某几个元素,应该保持在当前位置,其他相邻元素填补删除的空缺

下面说说难点的实现方法。先说观察者模式。实际上是引入了第三个对象,可观察对象,你可以把它看作中间人,所有元素都在这个中间人对象上注册了监听器,当其中一个被长按后,通知所有元素设置checkbox。

可以通过:

http://www.java2s.com/Code/Java/Design-Pattern/AsimpledemoofObservableandObserver.htm

中的示例了解观察者模式以及java Observer的使用方法。

在本例中,通过内部类实现了Observable接口:

class MyObservable extends Observable {

public void toobarStatusChanged(boolean visible) {

setChanged();

notifyObservers(visible);

}

}

这里实现了Observer的继承类,并为每个元素创建示例注册到Observable中:

// 创建观察者,用于监控是否有Checkbox可见性事件,然后加入到可观察对象中

Observer observer = new Observer() {

@Override

public void update(Observable observable, Object data) {

checkBox.setVisibility((Boolean) data ? View.VISIBLE

: View.INVISIBLE);

checkBox.setChecked(checkedIds.contains(index));

}

};

observable.addObserver(observer);

另外,实现了一个Observer实例用于监控长按事件的变化,来生成或者取消工具条按钮。

这个实现目前可以工作,但是可能还有问题,造成大量的Observer对象的存在,因为每次创建ListView的Row都会重新创建,等有时间再解决。

如何做到删除其中几个元素,后面相邻元素自动补位,而且屏幕保持在当前位置。我的做法基本思路是,取到当前屏幕显示的各行,在Nexusone的分 辨率下可取到3行,然后获取各行的ViewGroup对象,清空它的子视图,然后再根据数据源(本文是一个List)重新填充行的内容。

如何得到当前在屏幕的行的ViewGroup呢?其实并不复杂:

myListView.getChildCount()

可得到屏幕上能看到几行。

再通过遍历:

myListView.getChildAt(i)

就可以得到各行的ViewGroup。ListView的实现原理是,只保存当前可见的几行视图。并保存在ViewGroup的childView 数组中,上述的两个方法getChildCount和getChildAt实际上是ViewGroup的,ListView并未覆盖。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...