Android——基本控件(下)(二十)

这篇具有很好参考价值的文章主要介绍了Android——基本控件(下)(二十)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 树型组件:ExpandableListView

1.1 知识点

(1)掌握树型组件的定义;

(2)可以使用事件对树操作进行监听。

2. 具体内容

Android——基本控件(下)(二十),Android,开发语言,android,gitee

既然这个组件可以完成列表的功能,肯定就需要一个可以操作的数据,那么这里也是使用setAdapter()这个方法完成数据的设置,可以大家可以发现,setAdapter方法中可以接受数据类型:

public void setAdapter(ExpandableListAdapter adapter) 

发现如果想要设置数据,必须要一个ExpandaableListAdapter这个接口对象。常用的实现类就是BaseExpandableListAdapter,如果要设置数据,那么必须要写一个适配器类集成BaseExpandableListAdapter这个抽象类。

Android——基本控件(下)(二十),Android,开发语言,android,gitee

Android——基本控件(下)(二十),Android,开发语言,android,gitee

定义一个适配器类。

package com.example.expandablelistview;

import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.FrameLayout.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter {
	private String[] groups = {"我的好友","家人","同事","同学","黑名单"};
	private String[][] child = {{"张三","李四"},{"父亲","母亲"},{"朱六","张鹏程"},{"王五","赵六"},{"票贩子","推销"}};
	private Context context;
	public MyBaseExpandableListAdapter(Context  context){
		this.context = context;
	}
	@Override
	public Object getChild(int groupPosition, int childPosition) {//取得指定的子项
		return this.child[groupPosition][childPosition];
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {//取得子项ID
		return childPosition;
	}
	public  TextView bulidTextView(){//自定义方法,建立文本
		TextView textView = new TextView(this.context);
		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,35);//指定布局参数
		textView.setLayoutParams(params);
		textView.setTextSize(15.0f);
		textView.setGravity(Gravity.LEFT);
		textView.setPadding(10,10,10,10);//设置内边距
		return textView ;
	}

	@Override
	public View getChildView(int groupPosition, int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {//返回子项组件
		TextView textView = this.bulidTextView();
		textView.setText(getChild(groupPosition,childPosition).toString());//设置内容
		return textView;
	}

	@Override
	public int getChildrenCount(int groupPosition) {//取得子项个数
		return this.child[groupPosition].length;
	}

	@Override
	public Object getGroup(int groupPosition) {//返回组对象
		return this.groups[groupPosition];
	}

	@Override
	public int getGroupCount() {//返回组个数
		return this.groups.length;
	}

	@Override
	public long getGroupId(int groupPosition) {
		return groupPosition;
	}

	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {
		TextView textView = this.bulidTextView();
		textView.setText(this.getGroup(groupPosition).toString());
		return textView;
	}

	@Override
	public boolean hasStableIds() {//
		return true;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}

}

现在我们适配器类已经完成了,此时需要定义一个专门的组件去填充数据,这个组件就需要在布局中完成。

<LinearLayout 
    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"
    android:orientation="vertical">
    <ExpandableListView
        android:id="@+id/mylistView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

现在的关键还是在Activity程序的编写。

package com.example.expandablelistview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ExpandableListAdapter;
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.Toast;

public class ExpandableListViewActivity extends Activity {
	private ExpandableListView mylistView = null;
	private ExpandableListAdapter adapter = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_expandable_list_view);
		this.mylistView = (ExpandableListView) super.findViewById(R.id.mylistView);
		this.adapter = new MyBaseExpandableListAdapter(this);
		this.mylistView.setAdapter(this.adapter);//设置数据
		//此时我们的组件显示就已经完成,其实组件的显示意义似乎不是很大,肯定要跟上事件处理
		
		this.mylistView.setOnChildClickListener(new OnChildClickListener(){//设置子节点单击事件
			@Override
			public boolean onChildClick(ExpandableListView parent, View v,
					int groupPosition, int childPosition, long id) {
				Toast.makeText(ExpandableListViewActivity.this, "子菜单被单击,组:" +groupPosition +",子:" + childPosition  , Toast.LENGTH_SHORT).show();
				return false;
			}
			
		});
		this.mylistView.setOnGroupClickListener(new OnGroupClickListener(){//设置组单击事件

			@Override
			public boolean onGroupClick(ExpandableListView parent, View v,
					int groupPosition, long id) {
				Toast.makeText(ExpandableListViewActivity.this, "组被单击了" , Toast.LENGTH_SHORT).show();
				return false;
			}
			
		});
		this.mylistView.setOnGroupCollapseListener(new OnGroupCollapseListener(){//菜单组关闭事件

			@Override
			public void onGroupCollapse(int groupPosition) {
				Toast.makeText(ExpandableListViewActivity.this, "组关闭" , Toast.LENGTH_SHORT).show();
				
			}
			
		});
		this.mylistView.setOnGroupExpandListener(new OnGroupExpandListener(){//菜单组打开事件

			@Override
			public void onGroupExpand(int groupPosition) {
				Toast.makeText(ExpandableListViewActivity.this, "组打开" , Toast.LENGTH_SHORT).show();
			}
			
		});
		this.mylistView.setOnItemClickListener(new OnItemClickListener(){//单击子项

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				Toast.makeText(ExpandableListViewActivity.this, "子项单击" , Toast.LENGTH_SHORT).show();
			}
		});
		
	}
}

关键的问题还是在数据的设置上。

1.3 小结

(1)使用ExpandableListView可以完成数据的分组显示;

(2)ExpandableListView组件的分组及子项都可以监听并进行相应处理。文章来源地址https://www.toymoban.com/news/detail-682184.html

到了这里,关于Android——基本控件(下)(二十)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android——基本控件之下拉列表:Spinner(九)

    (1)掌握下拉列表Spinner的使用; (2)可以通过程序配置Spinner显示内容; (3)可以通过配置文件配置Spinner显示内容。 在html中,下拉列表使用select 这个标签完成,如果想要在此标签中添加下拉列表的内容的话,是要经option这个标签完成,那么在android中使用Spinner这个组件完

    2024年02月13日
    浏览(36)
  • Android开发之自定义控件-组合控件的开发与实现

    最终实现的效果展示图:   类似支付宝微信,底部分隔线对齐标题效果:       完整渲染显示效果(包含三个条目右边不同颜色的文字): 立体效果:  隐藏资产总额条目右边更多箭头  隐藏中国历史条目右边的文字: 隐藏中国历史条目下边的分隔线: 隐藏条目2中国历史左

    2024年02月10日
    浏览(41)
  • Android开发基础——自定义控件

    Android中常用控件和布局的继承结构如下图所示:  从上面可以看出,所有控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的。View是Android中最基本的一种UI组件,其可以在屏幕上绘制一块矩形区域,并能够响应这块区域的各种事件,因此,用户

    2023年04月10日
    浏览(36)
  • Android开发控件形状之自定义圆角button(三种形态)

    第一步:在drawable文件下创建button的形状描述文件btn_shape.xml btn1.xml btn2.xml btn3.xml 第二步:在布局文件中layout.xml中对btn1.xml以上三种其中一种的引用语句,用来设置button形状: android:background=\\\"@drawable/btn1\\\" 效果图: 点击前 点击后     解析shape文件中的android:shape属性:  Android

    2024年02月13日
    浏览(42)
  • Android应用开发-Flutter的LongPressDraggable控件回调函数onDraggableCanceled使用

    以下是如何使用 onDraggableCanceled 的示例: velocity 参数表示拖动被取消时的速度信息。 offset 参数表示拖动被取消时的偏移量信息。 这个回调通常用于在拖动被取消时执行一些清理工作或展示一些反馈。例如,你可能想要将拖动对象返回到原始位置,或者显示一个提示,告诉用

    2024年03月08日
    浏览(42)
  • Android开发——控件EditText, 2.获取EditText输入的数据,通过按钮点击实现,ImageView控件,缩放类型,控件ProgressBar,常用属性详解,进度条设置

    1. android : hint 输入提示 2. android : textColorHint  输入提示文字的颜色 3. android : inputType  输入类型 4. android : drawableXxxx 在输入框的指定方位添加图片 5. android : drawablePadding  设置图片与输入内容的间距 6. android : paddingxxxx  设置内容与边框的间距 7. android : backgrou

    2024年02月07日
    浏览(48)
  • Android-NDK开发——基本概念

    在Android开发中,有时候出于安全,性能,代码共用的考虑,需要使用C/C++编写的库。虽然在现代化工具链的支持下,这个工作的难度已经大大降低,但是毕竟万事开头难,初学者往往还是会遇到很多不可预测的问题。本篇就是基于此背景下写的一份简陋指南,希望能对刚开始编

    2024年02月09日
    浏览(38)
  • Android应用开发(4)视图布局基本属性

    Android应用开发学习笔记——目录索引 本章介绍视图(View)的基本概念及其用法,包括:如何设置视图的宽度和高度,如何设置视图的外部间距和内部间距,如何设置视图的外部对齐方式和内部对齐方式等。 在Android中,什么是视图(View)?View是Android中所有控件的基类,不

    2024年02月03日
    浏览(44)
  • Android开发之Compose基础学习-Surface容器的基本使用

    先上图 再看代码

    2024年02月15日
    浏览(43)
  • 【常用开发工具】保姆级教程Android Studio安装和基本使用

    🔎这里是【常用开发工具】,关注我学习编程不迷路 如果对你有帮助,给博主一个免费的点赞👍以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【常用开发工具】 目前更新IDEA、Tomcat、Maven、Git等预计会开10+期,大家一起学习一起进步。 📢📢有写的不好或写错的地

    2023年04月16日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包