首页 > 代码库 > 【安卓笔记】ExpandableListView的使用
【安卓笔记】ExpandableListView的使用
实现效果:
即可伸展的ListView
其实跟普通的ListView使用没啥区别,只是ListView改为了ExpandableListView,另外适配器由BaseAdapter也换成了BaseExpandableListAdapter。
步骤:
1.编写布局文件。
分为三个,分别是主布局,group分组布局,group item布局:
activity_main.xml:
<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.example.expandablelistviewdemo.MainActivity" > <ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#000" android:dividerHeight="2.5dp" android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" > </ExpandableListView> </RelativeLayout>
list_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="match_parent" android:orientation="vertical" > <TextView android:id="@+id/listTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" android:paddingTop="10dp" android:textColor="#A4C739" /> </LinearLayout>list_item.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="match_parent" android:orientation="vertical" > <TextView android:id="@+id/expandedListItem" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" android:paddingTop="10dp" /> </LinearLayout>2.编写适配器代码:
package com.example.expandablelistviewdemo; import java.util.HashMap; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; public class MyExpandableListAdapter extends BaseExpandableListAdapter { private Context mContext; private List<String> expandableListTitle; private HashMap<String, List<String>> expandableListDetail; public MyExpandableListAdapter(List<String> expandableListTitle,HashMap<String,List<String>> expandableListDetail,Context mContext) { this.expandableListDetail = expandableListDetail; this.expandableListTitle = expandableListTitle; this.mContext = mContext; } @Override public int getGroupCount()//分组数 { return this.expandableListTitle.size(); } @Override public int getChildrenCount(int groupPosition)//分组内的item数 { return this.expandableListDetail.get(expandableListTitle.get(groupPosition)).size(); } @Override public Object getGroup(int groupPosition)//获取分组数据 { return this.expandableListTitle.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition)//获取第几分组第几个item的数据 { return this.expandableListDetail.get(this.expandableListTitle.get(groupPosition)).get(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) { String data = http://www.mamicode.com/this.expandableListTitle.get(groupPosition);>可以看到,适配器中有两个getView的方法,分别去构造group和child的view。3.构造数据源package com.example.expandablelistviewdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class ExpandableListDataPump { public static HashMap<String, List<String>> getData() { HashMap<String, List<String>> expandableListDetail = new HashMap<String, List<String>>(); List<String> technology = new ArrayList<String>(); technology.add("Beats sued for noise-cancelling tech"); technology.add("Wikipedia blocks US Congress edits"); technology.add("Google quizzed over deleted links"); technology.add("Nasa seeks aid with Earth-Mars links"); technology.add("The Good, the Bad and the Ugly"); List<String> entertainment = new ArrayList<String>(); entertainment.add("Goldfinch novel set for big screen"); entertainment.add("Anderson stellar in Streetcar"); entertainment.add("Ronstadt receives White House honour"); entertainment.add("Toronto to open with The Judge"); entertainment.add("British dancer return from Russia"); List<String> science = new ArrayList<String>(); science.add("Eggshell may act like sunblock"); science.add("Brain hub predicts negative events"); science.add("California hit by raging wildfires"); science.add("Rosetta's comet seen in close-up"); science.add("Secret of sandstone shapes revealed"); expandableListDetail.put("TECHNOLOGY NEWS", technology); expandableListDetail.put("ENTERTAINMENT NEWS", entertainment); expandableListDetail.put("SCIENCE & ENVIRONMENT NEWS", science); return expandableListDetail; } }
4.编写主界面的代码package com.example.expandablelistviewdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.View; 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 MainActivity extends Activity { private ExpandableListView elv = null; private MyExpandableListAdapter adapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); elv = (ExpandableListView) findViewById(R.id.elv); final HashMap<String,List<String>> itemData = http://www.mamicode.com/ExpandableListDataPump.getData();>ok,完成。这里需要注意的是ExpandableListView有多个监听器,group收缩和伸展以及子条目点击等等,按需监听。另外,默认情况下显示的时候有个箭头,你可以通过setGroupIndicator方法设置你需要的标识。源码地址:https://github.com/Rowandjj/ExpandableListViewDemo【安卓笔记】ExpandableListView的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。