Android学习笔记:如何对ExpandableListView进行精确的点击或长按控制

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

在做项目中经常要用到ExpandableListView这个组件来对数据进行显示,使用非常方便。其中也提供了很多对ExpandableListView进行各种操作的监听,如下:

可以看到有对Group点击、长按;有对Child单击、长按;还有纯粹的单击、长按等等。并不是我觉得使用这些不方便,而是觉得对于一个新手在不怎么熟悉api的情况下,该如何迅速的找到适合自己用的呢?例如:我在写一个聊天的应用的时候,用的就是ExpandableListView来进行好友的显示,默认分组为weimingming(未命名),在这里我需要对组进行增删改、对好友也要进行一些操作,对于组的增删我放在了Menu里面触发,而对于组的改名,则是长按该group,然后可以进行上下文菜单设置或者通过弹出一个对话框来进行设置;对于好友有移动和一些权限的操作,都是通过长按放在上下文菜单中进行,如果单击别人则跳入聊天界面,如果单击或者长按自己,则显示个人资料。当我不能正确处理上面的关系的时候,我就会对使用哪种监听而不会产生功能重复方面感觉比较混乱。于是通过上网查了些资料发现一种比较好的方式,就是在适配器中产生groupView和childView的时候,分别进行Tag值的设置,如下:

getChildView:

[java]

@Override

public View getChildView(final int arg0, final int arg1, boolean arg2, View view,

ViewGroup arg4) {

if(view==null){

view = inflater.inflate(R.layout.team_layout_main_list_item, null);

}

TextView textView = (TextView) view.findViewById(R.id.team_main_list_username);

ImageView imageView = (ImageView) view.findViewById(R.id.team_main_list_head);

imageView.setImageResource(PrortaitUtils.conversionIdToRes(((UserInfo)getChild(arg0, arg1)).getPortrait()));

view.setTag(R.id.team_singlechat_id_send, arg0);

view.setTag(R.id.team_singlechat_id_close, arg1);//备注1

textView.setText(((UserInfo)getChild(arg0, arg1)).getUsername());

textView.setTextColor(Color.BLACK);

view.setBackgroundColor(Color.rgb(247, 243, 247));

view.setBackgroundResource(R.drawable.team_item_bg_selector);

return view;

}

getGroupView:

[java]

@Override

public View getGroupView(int arg0, boolean arg1, View groupView, ViewGroup arg3) {

if(groupView == null){

groupView = inflater.inflate(R.layout.team_layout_main_list_group, null);

}

TextView groupTextView = (TextView) groupView.findViewById(R.id.team_main_list_teamname);

ImageView groupImageView = (ImageView) groupView.findViewById(R.id.team_main_list_into);

groupImageView.setImageResource(R.drawable.team_into1);

if(arg1){

groupImageView.setImageResource(R.drawable.team_into2);

}

groupView.setTag(R.id.team_singlechat_id_send, arg0);

groupView.setTag(R.id.team_singlechat_id_close, -1);//备注2

groupTextView.setText(getGroup(arg0).toString());

groupTextView.setTextColor(Color.BLACK);

return groupView;

}

备注1:这里因为是产生childView,所以这里的group和child位置的值都已经给出,我们只需要把这两个值保存起来,setTag有一个方法里面传入两个参数,第一个为资源文件中的id,这个id必须为资源文件中的id,而且要和groupView中设置的能对应起来,至于是哪一个组件的id无所谓,只要你在用的时候能想起来,通过它得到你想要的位置值就行。第二个就是你要传入的值,包括group和child的位置

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

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

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

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

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

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

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

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

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

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

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

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

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

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