模仿的QQ好友列表的形式,效果如下 ,数据是写死的数组
数据是写死的数组:
分组名称
好友名
下面上代码:
activity::::::::::::::::::::::::::::::::::::::::::::::::::::::;
package com.activity;
import com.example.expandablelistview.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.Toast;
public class BuddyActivity extends Activity {
ExpandableListView mExpandableListView;
// 群组名称
private String[] group = new String[] { "在线好友", "我的好友", "我的同事" };
// 好友名称
private String[][] buddy = new String[][] { { "甘于翔", "张正遥", "韩敏" },
{ "白慧", "李欢", "蒋磊" }, { "胡鹏", "胡文杰", "尹浩" } };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_expandablelistview);
initView();
}
private void initView() {
mExpandableListView = (ExpandableListView) findViewById(R.id.elv_view);
ExpandableListAdapter adapter = new BuddyAdapter(this, group, buddy);
mExpandableListView.setAdapter(adapter);
// 分组展开
mExpandableListView
.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
}
});
// 分组关闭
mExpandableListView
.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
}
});
// 子项单击
mExpandableListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(
BuddyActivity.this,
group[groupPosition] + " : "
+ buddy[groupPosition][childPosition],
Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
适配器::::::::::::::::::::::::::::::::::::::::::::::
package com.activity;
import com.example.expandablelistview.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class BuddyAdapter extends BaseExpandableListAdapter {
private String[] group;
private String[][] buddy;
private Context context;
LayoutInflater inflater;
public BuddyAdapter(Context context, String[] group, String[][] buddy) {
this.context = context;
inflater = LayoutInflater.from(context);
this.group = group;
this.buddy = buddy;
}
@Override
public int getGroupCount() {
return group.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return buddy[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return group[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return buddy[groupPosition][childPosition];
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.activity_group, null);
TextView groupNameTextView = (TextView) convertView
.findViewById(R.id.buddy_listview_group_name);
groupNameTextView.setText(getGroup(groupPosition).toString());
ImageView image = (ImageView) convertView
.findViewById(R.id.buddy_listview_image);
image.setImageResource(R.drawable.ic_launcher);
// 更换展开分组图片
if (!isExpanded) {
image.setImageResource(R.drawable.ic_launcher);
}
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.activity_child_item, null);
TextView nickTextView = (TextView) convertView
.findViewById(R.id.buddy_listview_child_nick);
nickTextView.setText(getChild(groupPosition, childPosition).toString());
return convertView;
}
// 子选项时候可以选择
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
以下是布局文件:
activity_child_item:::::::::::::::::::::::::::::::::::::::::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40dip"
>
<ImageView
android:id="@+id/buddy_listview_child_avatar"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/buddy_listview_child_nick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/buddy_listview_child_avatar"
android:text="昵称"
android:textSize="16sp" />
<TextView
android:id="@+id/buddy_listview_child_trends"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buddy_listview_child_nick"
android:layout_alignParentBottom="true"
android:text="该好友暂时没有新动态"
android:textSize="12sp" />
</RelativeLayout>
activity_expandablelistView:::::::::::::::::::::::::::::::::::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
>
<ExpandableListView
android:id="@+id/elv_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ExpandableListView>
</LinearLayout>
activity_group::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="30dp"
android:id="@+id/rl_group"
android:background="#219ad6"
>
<ImageView
android:id="@+id/buddy_listview_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/buddy_listview_group_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/buddy_listview_image"
android:text="分组名称" />
<TextView
android:id="@+id/buddy_listview_group_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="[10/10]"/>
</RelativeLayout>
以上的这些代码基本上可以跑起来,成如图的效果,然后因为数据都是写死的没有 请求网络动态的获取,所以十分简单,
要从网络获取json然后用Gson解析 然后 转成自己需要的数组,然后适配 整个一套流程走下来要注意的地方有很多。。。。
ExpandableListView还有一些特需的属性:
1.设置ExpandableListView默认展开
先实例化 exListView
然后
exListView.setAdapter(exlvAdapter);
//遍历所有group,将所有项设置成默认展开
int groupCount = exListView.getCount();
for (int i=0; i<groupCount; i++) {
exListView.expandGroup(i);
};
2.去掉ExpandableListView默认的箭头:
用到ExpandableListView时有个箭头图标系统自带的在你自定义布局也不能去掉只要设置一个属性即可,如下:
settingLists.setGroupIndicator(null); ~~~~~~~~~~~~~此处就是设置自定义的箭头图标的。置空则没有了。
也可以自定义(但是位置还是在那个地方不推荐)如下:
首先,自定义一个expandablelistviewselector.xml文件,具体内容如下:
Java代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_expanded="true" android:drawable="@drawable/expandablelistviewindicatordown" />
<item android:drawable="@drawable/expandablelistviewindicator" />
</selector>
加一句代码如下:
settingLists.setGroupIndicator(this.getResources().getDrawable(R.drawable.expandablelistviewselector));
大功告成
3.将默认的箭头修改到右边显示:
1首先 ExpandableListView elistview;
elistview.setGroupIndicator(null);//将控件默认的左边箭头去掉,
2在 自定义的继承自BaseExpandableListAdapter的adapter中有一个方法
/**
* 父类view
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
Log.i("zhaoxiong","parent view");
LinearLayout parentLayout=(LinearLayout) View.inflate(context, R.layout.wowocoupons_parent_item, null);
TextView parentTextView=(TextView) parentLayout.findViewById(R.id.parentitem);
parentTextView.setText(parentlist.get(groupPosition));
ImageView parentImageViw=(ImageView) parentLayout.findViewById(R.id.arrow);
//判断isExpanded就可以控制是按下还是关闭,同时更换图片
if(isExpanded){
parentImageViw.setBackgroundResource(R.drawable.arrow_down);
}else{
parentImageViw.setBackgroundResource(R.drawable.arrow_up);
}
return parentLayout;
}