实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述android-基础编程-ExpandableListview相关的知识,希望能为你提供帮助。
ExpandableListView继承ListView,具有LIstVIew的基本功能。此外具有group/child,由组与子元素组成。
1.布局主要有是三个。
a.主布局:
< ExpandableListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/expandlistview" android:dividerHeight="5dp" android:background="#ffffff" android:divider="@drawable/expandchilddivide" android:childDivider="#000000" />
b.Group布局:
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > < TextView android:id="@+id/group_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="10dip" android:paddingBottom="10dip" android:gravity="center_horizontal" android:text="122" /> < /LinearLayout>
c.Child布局:
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > < LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > < TextView android:id="@+id/textOne" android:layout_width="match_parent" android:layout_height="match_parent" android:text="1" /> < TextView android:id="@+id/textTwo" android:layout_width="match_parent" android:layout_height="match_parent" android:text="2" /> < TextView android:id="@+id/textThree" android:layout_width="match_parent" android:layout_height="match_parent" android:text="3" /> < /LinearLayout> < /LinearLayout>
2.代码生成 类似adapter 创建adapter(ExpandableListAdapter、BaseExpandableListAdapter、SimpleExpandableListAdapter 依次继承关系)
a.创建adapter
//自定义适配器 class Adapter extends BaseExpandableListAdapter { //获取子元素对象 @Override public Object getChild(int groupPosition, int childPosition) { return null; }//获取子元素Id @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; }//加载子元素并显示 @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View view = null; ChildHolder childholder = null; if (convertView != null) { view = convertView; childholder = (ChildHolder) view.getTag(); } else { view = View.inflate(ExpandableListViewActi.this, R.layout.expand_child, null); childholder = new ChildHolder(); //childholder.mImage = (ImageView) view.findViewById(R.id.image); childholder.mPrice = (TextView) view.findViewById(R.id.textTwo); childholder.mStateText = (TextView) view.findViewById(R.id.textOne); childholder.mSecondPrice = (TextView) view.findViewById(R.id.textThree); view.setTag(childholder); } //childholder.mImage.setOnClickListener(new OnClickListener() { //@Override //public void onClick(View v) { //Toast.makeText(MainActivity.this, "第"+groupPosition+"组的第"+childPosition+"圖標被点击了", 0).show(); //} //}); childholder.mPrice.setText(child_list.get(groupPosition)); int len = group_list.size(); System.out.println(len + "-----------------"); childholder.mStateText.setText(child_list.get(groupPosition)); childholder.mSecondPrice.setText(child_list.get(groupPosition)); return view; }//获取子元素数目 @Override public int getChildrenCount(int groupPosition) { return child_list.size(); }//获取组元素对象 @Override public Object getGroup(int groupPosition) { return group_list.get(groupPosition); }//获取组元素数目 @Override public int getGroupCount() { return group_list.size(); }//获取组元素Id @Override public long getGroupId(int groupPosition) { return groupPosition; }//加载并显示组元素 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View view = null; GroupHolder groupholder = null; if (convertView != null) { view = convertView; groupholder = (GroupHolder) view.getTag(); } else { view = View.inflate(ExpandableListViewActi.this, R.layout.expand_group, null); groupholder = new GroupHolder(); groupholder.mSpaceText = (TextView) view.findViewById(R.id.group_text); view.setTag(groupholder); } groupholder.mSpaceText.setText(group_list.get(groupPosition)); return view; }@Override public boolean hasStableIds() {return true; }@Override public boolean isChildSelectable(int groupPosition, int childPosition) {return true; }}
b.生成主界面代码,设置adapter .expandable四中点击相应事件。
private void initView() { mListView = (ExpandableListView) findViewById(R.id.expandlistview); mInflater = LayoutInflater.from(ExpandableListViewActi.this); group_list = new ArrayList< String> (); for (int i = 0; i < 5; i++) { group_list.add("zcx"); child_list.add("child"); } Adapter adapter = new Adapter(); //mListView.setGroupIndicator(null); /** * ExpandableListView的组监听事件 */ //mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { // //@Override //public boolean onGroupClick(ExpandableListView parent, View v, //int groupPosition, long id) { //Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组被点击了", 0).show(); //return true; //} //}); /** * ExpandableListView的组展开监听 */ mListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {@Override public void onGroupExpand(int groupPosition) { Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组展开", 0).show(); } }); /** * ExpandableListView的组合拢监听 */ mListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {@Override public void onGroupCollapse(int groupPosition) { Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组合拢", 0).show(); } }); /** * ExpandableListView的子元素点击监听 */ mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组的第" + childPosition + "被点击了", 0).show(); return true; } }); mListView.setAdapter(adapter); //int groupCount = mListView.getCount(); //for(int i=0; i< groupCount; i++){ //mListView.expandGroup(i); //} }
3.效果图
文章图片
【android-基础编程-ExpandableListview】
推荐阅读
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
- Android中基于Socket的网络通信
- Android流畅度之帧率
- Android动态改变布局
- 在Android上运用Anko和Kotlin开发数据库(SQLite从来不是一件轻松的事(KAD25))
- Android Studio升级到0.8.1后怎样设置字体大小()
- Android之asset文件夹下文件的使用
- Android 基于Netty的消息推送方案之概念和工作原理
- App Extension的脱壳办法