- 浏览: 201153 次
- 性别:
- 来自: SH
最新评论
-
ybitts:
能把源码发我邮箱吗 谢谢了 ybitts@sina.cn
用ExpandableListView实现类似QQ好友列表 -
gmailToyou:
shishisssss
用ExpandableListView实现类似QQ好友列表 -
jjy119:
感觉不错啊,谢谢分享了
用ExpandableListView实现类似QQ好友列表 -
yyf365:
请问有源码么?看之前评论貌似有的
用ExpandableListView实现类似QQ好友列表 -
o_kxj:
源码在哪里呢?谢谢
用ExpandableListView实现类似QQ好友列表
ExpandableListView是一个用来显示二级节点的listview。
qq好友列表中子列表上下移动时,父节点在顶端会始终显示,这里我们可以自定义一个view来充当这个父节点。
主布局文件qq_listview如下,其中当我们拖动列表时,系统默认拖动过程中列表背景是黑的,我们可以通过android:cacheColorHint="#00000000"将其设置为透明,其中前两位是透明效果参数(00-99),后六位是颜色的设置。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/default_bg_hdpi"> <LinearLayout android:id="@+id/gone_linear" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/expand_column_bg" android:visibility="gone" android:cacheColorHint="#50000000" > <ImageView android:id="@+id/qq_list_imageview" android:layout_width="wrap_content" android:layout_height="30dip" android:src="@drawable/narrow_select" /> <TextView android:id="@+id/qq_list_textview" android:layout_marginLeft="50dip" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ExpandableListView android:id="@+id/qq_listview" android:cacheColorHint="#00000000" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </FrameLayout> </LinearLayout>
如果我们想更换父节点打开和关闭时的箭头,可以先设置一个selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:drawable="@drawable/expand_column_bg_over" /> <item android:state_pressed="true" android:drawable="@drawable/expand_column_bg" /> <item android:state_pressed="false" android:drawable="@drawable/feedlistdividerbg"></item> </selector>
然后在代码中调用
elistview = (ExpandableListView)findViewById(R.id.qq_listview); //替换ExpandableListView的打开关闭时的箭头图标 elistview.setGroupIndicator(this.getResources().getDrawable(R.drawable.expand_list_selector));
此外,我们还要设置父节点和子节点item的布局文件
父节点qq_list_parent.xml如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/expand_column_bg"> <TextView android:id="@+id/parend" android:layout_width="wrap_content" android:layout_height="30dip" android:layout_marginLeft="50dip" /> </LinearLayout>
子节点qq_listview_child.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" > <TextView android:id="@+id/child" android:layout_width="wrap_content" android:layout_height="40dip" android:layout_marginLeft="80dip" /> </LinearLayout>
java代码如下
package com.sy.android.qqlistview; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnGroupCollapseListener; import android.widget.ExpandableListView.OnGroupExpandListener; import android.widget.LinearLayout; import android.widget.SimpleExpandableListAdapter; import android.widget.TextView; import com.sy.android.testAndroid.R; public class QQListView extends Activity { private static ArrayList<Map<String,String>> parentData = new ArrayList<Map<String,String>>(); private static ArrayList<ArrayList<Map<String,String>>> childData = new ArrayList<ArrayList<Map<String,String>>>(); private ExpandableListView elistview; private TextView tv; /** *当前打开的父节点 */ private int the_group_expand_position=-1; /** * 打开的父节点所与的子节点数 */ private int position_child_count=0; /** * 是否有打开的父节点 */ private boolean isExpanding=false; public void getData(){ for(int i=0; i<20;i++){ Map<String,String> map = new HashMap<String,String>(); map.put("parend", i+""); parentData.add(map); } for(int i=0;i<20;i++){ ArrayList<Map<String,String>> child = new ArrayList<Map<String,String>>(); for(int j=0; j<20;j++){ Map<String,String> map = new HashMap<String,String>(); map.put("child", i+""+j); child.add(map); } childData.add(child); } } public void onCreate(Bundle saveBundle){ super.onCreate(saveBundle); setContentView(R.layout.qq_listview); elistview = (ExpandableListView)findViewById(R.id.qq_listview); //替换ExpandableListView的打开关闭时的箭头图标 elistview.setGroupIndicator(this.getResources().getDrawable(R.drawable.expand_list_selector)); tv = (TextView)findViewById(R.id.qq_list_textview); /** * 滑动子列表时在上方显示父节点的view */ final LinearLayout linear = (LinearLayout)findViewById(R.id.gone_linear); /** * 监听父节点打开的事件 */ elistview.setOnGroupExpandListener(new OnGroupExpandListener(){ @Override public void onGroupExpand(int groupPosition) { the_group_expand_position=groupPosition; position_child_count=childData.get(groupPosition).size(); isExpanding=true; } }); /** * 监听父节点关闭的事件 */ elistview.setOnGroupCollapseListener(new OnGroupCollapseListener(){ @Override public void onGroupCollapse(int groupPosition) { if(linear.getVisibility()==View.VISIBLE){ linear.setVisibility(View.GONE); } isExpanding=false; } }); linear.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { linear.setVisibility(View.GONE); elistview.collapseGroup(the_group_expand_position); } }); /** * 通过setOnScrollListener来监听列表上下滑动时item显示和消失的事件 */ elistview.setOnScrollListener(new OnScrollListener(){ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(isExpanding){ // 当当前第一个item id小于打开的父节点id 或大于打开的父节点id和它的子节点总数之和时 if(firstVisibleItem<the_group_expand_position || firstVisibleItem>(the_group_expand_position+position_child_count)){ linear.setVisibility(View.GONE); }else{ linear.setVisibility(View.VISIBLE); tv.setText(((Map)parentData.get(the_group_expand_position)).get("parend").toString()); } } } }); getData(); SimpleExpandableListAdapter selAdapter = new SimpleExpandableListAdapter(this, parentData, R.layout.qq_listview_parend_item, new String[]{"parend"}, new int[]{R.id.parend}, childData, R.layout.qq_liatview_child_item, new String[]{"child"}, new int[]{R.id.child} ); elistview.setAdapter(selAdapter); } }
实现的思路是通过setOnScrollListener来监听listview,从而获得显示在视图中的item的id,通过id的判断来决定显示在顶端的自定义的view是否显示
评论
11 楼
ybitts
2014-09-13
能把源码发我邮箱吗 谢谢了 ybitts@sina.cn
10 楼
gmailToyou
2012-06-30
shishisssss
9 楼
jjy119
2012-06-07
感觉不错啊,谢谢分享了
8 楼
yyf365
2012-03-27
请问有源码么?看之前评论貌似有的
7 楼
o_kxj
2012-03-10
源码在哪里呢?谢谢
6 楼
mydeadsky
2011-12-06
看不到下载地方啊
5 楼
bingtao115
2011-11-09
down下来试过了,不是我想要的效果,不过也有可取之处的
4 楼
newli2010.
2011-11-03
可以把源码放上嘛,拜读了。
3 楼
lingranyu
2011-10-31
拜读大作!!!非常好!!!!
2 楼
feng88724
2011-05-26
感谢分享。 不过测试下来,问题还很多。
1 楼
l16426434
2011-04-08
可以把工程代码 放上来吗
发表评论
-
捕获home事件
2011-12-19 16:47 1300android中得home事件app是不能捕获的,但是我们可以 ... -
android软键盘出来的时候覆盖底部的tab导航(转)
2011-11-15 12:49 3518今天要做一个搜索功能,搜索界面采用AutoComplete ... -
android中退出当前应用程序的四种方法
2011-07-29 11:20 1828从activityA跳到activityB,可以在As ... -
conversion to dalvik format failed with error 1
2011-07-18 16:15 1688andriod中如果引入jar包的方式不对就会出现一些奇怪的错 ... -
横竖屏切换时软键盘焦点
2011-07-11 15:48 1924我们横竖屏切换时,有时会调用onConfigurationCh ... -
android 权限大全
2011-06-01 19:13 1154我们在开发android应用的 ... -
类似home的弹出菜单(SlidingDrawer)
2011-05-26 20:16 2035当我们想实现系统home界面中弹出的菜单,实现像抽屉一样打开关 ... -
android 上google map的使用
2010-12-22 10:25 3972一.MAP API密钥的申请: ①在Eclip ... -
为数字添加LCD效果
2010-12-15 17:54 1535我们有时想为数据添加LCD效果,例如实现计时器时,我们想实现类 ... -
android权限列表
2010-11-20 15:37 1334android.permission.ACCESS_CHECK ... -
UI布局参数(持续更新)
2010-11-10 14:06 1473android:layout_above 将该控件的底部置于给 ... -
实现图片的圆角,倒影,转换
2010-11-02 22:04 5763大家好,这一节给大家分享的是Android中几种图像特效处 ... -
实现能定点移动的seekbar
2010-10-14 16:02 3058布局xml <?xml version=&quo ... -
Android MediaPlayer的生命周期
2010-09-12 22:55 18868这张状态转换图清晰的描 ... -
drawable 转换成bitmap
2010-09-09 13:37 2732public Bitmap setIcon(Draw ... -
在android中解析json
2010-08-12 17:59 6382android框架已经为我们集成了解析json的包 先一个 ...
相关推荐
本教程将详细讲解如何利用ExpandableListView实现类似QQ好友分组的功能。 首先,我们需要理解ExpandableListView的基本结构。这个控件允许我们创建一个层次结构的列表,其中每个父项(Group)可以包含多个子项...
在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展开和折叠不同的组,每个组下可以包含多个子项,非常适合用于构建类似QQ好友列表这样的分组数据展示。`ExpandableListView`提供了更丰富的交互...
在这个项目中,“ExpandableListView 实现QQ好友动态与评价”是一个很好的实践示例,它模拟了类似QQ应用中的好友动态展示方式,允许用户查看并交互好友的动态信息以及相关的评论。 首先,`ExpandableListView`的...
本源码将演示Android ExpandableListView的用法,制作一个类似QQ界面的好友分组列表展开收缩效果,为什么最开始没有使用ListView呢?因为ListView只能显示一级列表,如果实现像QQ好友列表那样的效果,就需要用到...
总的来说,创建一个类似QQ好友列表的ExpandableListView涉及到对数据的组织、适配器的编写、布局的设计以及交互的实现。这是一个综合性的任务,既需要理解Android UI组件的工作原理,也需要掌握数据处理和用户体验...
它是一个特殊的ListView,能够支持子项的扩展和收缩,非常适合用来实现类似QQ好友列表的分组效果。 **1. ExpandableListView基本使用** 首先,我们需要在布局文件中添加ExpandableListView组件,通过`...
在Android应用开发中,创建一个类似QQ好友列表的界面是一项常见的任务,这涉及到用户界面设计、数据管理和视图渲染等多个方面。在这个项目中,开发者利用`ExpandableListView`控件来实现这一功能,这是一种可扩展的...
本教程将详细讲解如何利用ExpandableListView实现类似QQ好友列表的展开和收缩功能。 首先,我们来了解ExpandableListView的基本概念。它是一个特殊的ListView,可以容纳一组可展开和收起的子项,每个父项下面都可以...
同时,为了实现类似QQ好友列表的动画效果,可以使用Animation或者Transition动画库,添加展开/折叠的过渡动画。 综上所述,这个"android qq好友列表"实例涵盖了Android UI设计、自定义适配器、自定义视图、数据加载...
ExpandableListView是Android SDK提供的一种可扩展的列表视图,它可以显示分组数据,每个分组下还可以包含多个子项,类似于QQ的好友列表,用户可以展开或折叠各个分组来查看或隐藏子项。 首先,我们来理解...
本示例"扩展listview,仿QQ好友列表"旨在教你如何基于ListView自定义一个功能丰富的、类似于QQ好友列表的界面。在这个Demo中,你可以学习到如何实现动态添加成员,并将其显示在列表的相应位置。 首先,我们需要创建...
这个标题所指的其实是如何创建一个具有类似QQ好友列表功能的Android应用,其中包含二级列表视图,并且允许特定项被固定在顶部,以便于用户快速访问。 首先,我们需要了解`ListView`。`ListView`是Android SDK提供的...
在Android开发中,创建一个类似QQ的好友列表是一项常见的任务,涉及到用户界面设计、数据管理以及交互效果。本文将深入探讨如何实现这样一个功能,并基于给定的"android仿QQ好友列表"项目进行分析。 首先,从标题...
本篇将详细介绍如何在Android中实现类似QQ好友列表的收缩与展开效果。 首先,我们需要了解实现这一功能的核心组件——ExpandableListView。ExpandableListView是Android提供的一个扩展版本的ListView,它支持子项的...
通过以上步骤,你可以实现一个类似QQ好友列表的ExpandableListView。在实际开发中,应根据具体需求调整数据模型和适配器的实现,以满足各种复杂场景。记得在编写代码时,保持良好的编程习惯,遵循Android设计原则,...
QQ好友列表源码是用于创建类似QQ应用中的好友列表展示效果的代码实现,通常涉及到UI设计、数据结构和用户交互等多个方面。这个源码可能包括一级列表和二级列表的结构,以便更好地组织和呈现好友信息。下面将详细介绍...
通过理解其工作原理和使用方法,你可以有效地利用这个组件来实现类似QQ好友列表的复杂界面。在实际项目中,可能需要结合提供的`PinnedHeaderExpandable`源代码文件进行学习和调试,以便更好地适应自己的应用场景。
在某些android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的。接触Android,也才一年的时间,大部分时间花在工作上(解bug。。。),界面上开发很少参与。自己维护的系统应用里,有个...
本项目“安卓仿QQ好友列表界面可默认展开”提供了一种实现方式,使得用户在打开应用时,好友列表能够自动展开,为用户提供更为直观和便捷的体验。 首先,我们要理解UI界面的设计。在安卓中,我们可以使用Android ...