700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ExpandableListView实现的简单类似QQ好友界面的可展开下拉列表

ExpandableListView实现的简单类似QQ好友界面的可展开下拉列表

时间:2022-08-30 08:08:01

相关推荐

ExpandableListView实现的简单类似QQ好友界面的可展开下拉列表

结果图:

布局文件:

<RelativeLayout xmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

<ExpandableListView

android:id="@+id/elv"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

</RelativeLayout>

组的样式布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/gtv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:textSize="36sp"

android:textColor="#0000ff"/>

</LinearLayout>

组展开后的子元素样式布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

<ImageView

android:id="@+id/cimg"

android:layout_width="50dp"

android:layout_height="50dp"/>

<TextView

android:id="@+id/ctv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_toRightOf="@id/cimg"

android:textSize="30sp"

android:textColor="#00ff00"/>

</RelativeLayout>

.Java文件:

package com.day8_qqdesign;

import android.app.Activity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ExpandableListView.OnGroupClickListener;

import android.widget.ExpandableListView.OnGroupCollapseListener;

import android.widget.ExpandableListView.OnGroupExpandListener;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

ExpandableListView elv;

//分组数据源

String groupData[]={"家人","好朋友","同事"};

String childData[][]={{"妈妈","爸爸","姐姐","弟弟"},{"李易峰","林志颖","陈学冬","杨洋"},{"刘亦菲","林依晨","赵丽颖","杨幂"}};

int[][] childimg={{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4},{R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8},{R.drawable.img9,R.drawable.img10,R.drawable.img11,R.drawable.img12}};

MyBaseadapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

elv=(ExpandableListView) findViewById(R.id.elv);

adapter=new MyBaseadapter();

elv.setAdapter(adapter);

elv.setOnGroupClickListener(new OnGroupClickListener() {

//点击哪个ExpandableListView,点击哪个分组的item,分组下标,分组item下标

@Override

public boolean onGroupClick(ExpandableListView parent, View v,

int groupPosition, long id) {

Toast.makeText(MainActivity.this,groupData[groupPosition],0).show();

return false;

}

});

//监听分组里内容点击事件

elv.setOnChildClickListener(new OnChildClickListener() {

//点击哪个控件,点击分组里内容的视图,点击分组的下标,点击分组里内容的下标,分组里内容的id

@Override

public boolean onChildClick(ExpandableListView parent, View v,

int groupPosition, int childPosition, long id) {

Toast.makeText(MainActivity.this,childData[groupPosition][childPosition],0).show();

return false;

}

});

//监听分组展开动作

elv.setOnGroupExpandListener(new OnGroupExpandListener() {

@Override

public void onGroupExpand(int groupPosition) {

Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表展开了",0).show();

}

});

//监听分组缩起来动作

elv.setOnGroupCollapseListener(new OnGroupCollapseListener() {

@Override

public void onGroupCollapse(int groupPosition) {

Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表收起来了",0).show();

}

});

}

public class MyBaseadapter extends BaseExpandableListAdapter

{

//获取分组个数

@Override

public int getGroupCount() {

return groupData.length;

}

//获取分组数据的个数

@Override

public int getChildrenCount(int groupPosition) {

return childData[groupPosition].length;

}

//下标为参数,获取分组的数据对象

@Override

public Object getGroup(int groupPosition) {

return groupData[groupPosition];

}

//下标为 groupPositio获取分组里下标为childPosition的数据对象

@Override

public Object getChild(int groupPosition, int childPosition) {

return childData[groupPosition][childPosition];

}

//下标为 int groupPositio获取分组的item 的id

@Override

public long getGroupId(int groupPosition) {

return groupPosition;

}

//下标为 int groupPositio获取分组的数据对象里面 下标为childPosition的item的id

@Override

public long getChildId(int groupPosition, int childPosition) {

return childPosition;

}

//底层设计

@Override

public boolean hasStableIds() {

return false;

}

/**

* getGroupView的视图对象 view

*

* int groupPosition: 当前分组的下标

* boolean isExpanded:当前分组是否展开

* View convertView: 复用的视图

* ViewGroup parent: 父控件ExpandableListView

*/

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

LayoutInflater inflater = getLayoutInflater();

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

TextView tv = (TextView) view.findViewById(R.id.gtv);

tv.setText(groupData[groupPosition]);

return view;

}

/**

* getChildView 子视图对象

* int groupPosition:当前分组的下标

* int childPosition:子分组的下标

* boolean isLastChild:是否是最后一个视图view

* View convertView:复用的视图

* ViewGroup parent:父控件ExpandableListView

*/

@Override

public View getChildView(int groupPosition, int childPosition,

boolean isLastChild, View convertView, ViewGroup parent) {

LayoutInflater inflater = getLayoutInflater();

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

TextView tv = (TextView) view.findViewById(R.id.ctv);

tv.setText(childData[groupPosition][childPosition]);

ImageView img=(ImageView) view.findViewById(R.id.cimg);

img.setImageResource(childimg[groupPosition][childPosition]);

return view;

}

//当前子元素是否能被选中

@Override

public boolean isChildSelectable(int groupPosition, int childPosition) {

return true;

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。