ExpandableListView 组件是Android组件中比较常用的组件,当点击一个父item 的时候将其自item显示出来,例如QQ 中的好友列表就是如此实现的,使用ExpandableListView 组件的关键就是设置其的Adapter,这个Adapter必须继承自BaseExpanableListAdapter,因此使用ExpandableListView的核心技术就是使用BaseExpanableListAdapter的使用
实现过程:
效果如下:
整体思路:
1:给ExpanableListView 设置适配器,必须设置数据源
2:数据源在实现 ExpanableListView的适配器继承自BaseExpandableListAdapter,其是ExpanableListView的子类, 需要重写多个方法,数据源中用到了自定义的View' 布局,此时根据自己的需求,来设置组合子项的布局样式
3:数据源设置好后,直接使用ExpanableListView.SetAdapter ()即可实现此收缩功能
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xiyou.com.expandablelistview.MainActivity">
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandableListView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Layout_group.xml
<?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="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/group_icon"
android:src="@mipmap/ga"
/>
<TextView
android:layout_width="wrap_content"
android:text="No Date"
android:id="@+id/group_title"
android:layout_height="wrap_content" />
</LinearLayout>
Layout_children.xml :
布局与Layout_group.xml相同。
代码如下:
package com.xiyou.com.expandablelistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/*
可扩展的listView
*/
public class MainActivity extends AppCompatActivity {
private ExpandableListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ExpandableListView) findViewById(R.id.expandableListView);
listView.setAdapter(new MyExpandableAdapter());
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, childs[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
return true;
}
});
}
private String[] groups = {"我的好友", "黑名单", "其它"};//组所显示的内容
private String[][] childs = {{"潘潘", "迪迪", "敦敦"}, {"卖房子", "卖肾"}, {"英雄联盟", "刀塔"}};//子项所显示的内容
// 适配器
class MyExpandableAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return groups.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return childs[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childs[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 false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.group_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.group_icon);
TextView textView = (TextView) convertView.findViewById(R.id.group_title);
imageView.setImageResource(R.drawable.ga);
textView.setText(groups[groupPosition]);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
int [] imgs = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e,
R.drawable.f,
};
int i = imgs.length;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.child_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.child_icon);
TextView textView = (TextView) convertView.findViewById(R.id.child_title);
imageView.setImageResource(imgs[childPosition]);
textView.setText(childs[groupPosition][childPosition]);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
Android UI基础之ExpandableListView的用法
ExpandableListView 组件是Android组件中比较常用的组件,当点击一个父item 的时候将其自item显示出来,例如QQ 中的好友列表就是如此实现的,使用ExpandableListView 组件的关键就是设置其的Adapter,这个Adapter必须继承自BaseExpanableListAdapter,因此使用ExpandableListView的核心技术就是使用BaseExpanableListAdapter的使用
实现过程:
效果如下:
整体思路:
1:给ExpanableListView 设置适配器,必须设置数据源
2:数据源在实现 ExpanableListView的适配器继承自BaseExpandableListAdapter,其是ExpanableListView的子类, 需要重写多个方法,数据源中用到了自定义的View' 布局,此时根据自己的需求,来设置组合子项的布局样式
3:数据源设置好后,直接使用ExpanableListView.SetAdapter ()即可实现此收缩功能
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xiyou.com.expandablelistview.MainActivity">
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandableListView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Layout_group.xml
<?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="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/group_icon"
android:src="@mipmap/ga"
/>
<TextView
android:layout_width="wrap_content"
android:text="No Date"
android:id="@+id/group_title"
android:layout_height="wrap_content" />
</LinearLayout>
Layout_children.xml :
布局与Layout_group.xml相同。
代码如下:
package com.xiyou.com.expandablelistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/*
可扩展的listView
*/
public class MainActivity extends AppCompatActivity {
private ExpandableListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ExpandableListView) findViewById(R.id.expandableListView);
listView.setAdapter(new MyExpandableAdapter());
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, childs[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
return true;
}
});
}
private String[] groups = {"我的好友", "黑名单", "其它"};//组所显示的内容
private String[][] childs = {{"潘潘", "迪迪", "敦敦"}, {"卖房子", "卖肾"}, {"英雄联盟", "刀塔"}};//子项所显示的内容
// 适配器
class MyExpandableAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return groups.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return childs[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childs[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 false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.group_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.group_icon);
TextView textView = (TextView) convertView.findViewById(R.id.group_title);
imageView.setImageResource(R.drawable.ga);
textView.setText(groups[groupPosition]);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
int [] imgs = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e,
R.drawable.f,
};
int i = imgs.length;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.child_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.child_icon);
TextView textView = (TextView) convertView.findViewById(R.id.child_title);
imageView.setImageResource(imgs[childPosition]);
textView.setText(childs[groupPosition][childPosition]);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
Android UI基础之ExpandableListView的用法
ExpandableListView 组件是Android组件中比较常用的组件,当点击一个父item 的时候将其自item显示出来,例如QQ 中的好友列表就是如此实现的,使用ExpandableListView 组件的关键就是设置其的Adapter,这个Adapter必须继承自BaseExpanableListAdapter,因此使用ExpandableListView的核心技术就是使用BaseExpanableListAdapter的使用
实现过程:
效果如下:
整体思路:
1:给ExpanableListView 设置适配器,必须设置数据源
2:数据源在实现 ExpanableListView的适配器继承自BaseExpandableListAdapter,其是ExpanableListView的子类, 需要重写多个方法,数据源中用到了自定义的View' 布局,此时根据自己的需求,来设置组合子项的布局样式
3:数据源设置好后,直接使用ExpanableListView.SetAdapter ()即可实现此收缩功能
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xiyou.com.expandablelistview.MainActivity">
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandableListView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Layout_group.xml
<?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="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/group_icon"
android:src="@mipmap/ga"
/>
<TextView
android:layout_width="wrap_content"
android:text="No Date"
android:id="@+id/group_title"
android:layout_height="wrap_content" />
</LinearLayout>
Layout_children.xml :
布局与Layout_group.xml相同。
代码如下:
package com.xiyou.com.expandablelistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/*
可扩展的listView
*/
public class MainActivity extends AppCompatActivity {
private ExpandableListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ExpandableListView) findViewById(R.id.expandableListView);
listView.setAdapter(new MyExpandableAdapter());
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, childs[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
return true;
}
});
}
private String[] groups = {"我的好友", "黑名单", "其它"};//组所显示的内容
private String[][] childs = {{"潘潘", "迪迪", "敦敦"}, {"卖房子", "卖肾"}, {"英雄联盟", "刀塔"}};//子项所显示的内容
// 适配器
class MyExpandableAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return groups.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return childs[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childs[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 false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.group_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.group_icon);
TextView textView = (TextView) convertView.findViewById(R.id.group_title);
imageView.setImageResource(R.drawable.ga);
textView.setText(groups[groupPosition]);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
int [] imgs = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e,
R.drawable.f,
};
int i = imgs.length;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.child_layout, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.child_icon);
TextView textView = (TextView) convertView.findViewById(R.id.child_title);
imageView.setImageResource(imgs[childPosition]);
textView.setText(childs[groupPosition][childPosition]);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}