zoukankan      html  css  js  c++  java
  • 控件:ExpandableListView 树型组件

    main.xml

    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
    ="vertical"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent">
    <ExpandableListView
    android:id="@+id/elistview"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content" />
    </LinearLayout>

    MyExpandableListAdapter.java   (适配器)

    View Code
    package org.lxh.demo;

    import android.content.Context;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.TextView;
    // 继承BaseExpandableListAdapter并覆写类中的抽象方法
    public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    // 组名称
    public String[] groups = { "我的好友", "家人", "同事", "黑名单" };
    // 定义组项
    public String[][] children = {
    { "董鸣楠", "王月清", "周艳军" },
    { "父亲", "母亲" }, { "刘宏伟", "李祺", "刘媛" },
    { "票贩子", "造假商" } };
    // 保存上下文对象
    private Context context = null;
    // 构造方法接收
    public MyExpandableListAdapter(Context context) {
    this.context = context;
    }
    @Override // 取得指定的子项
    public Object getChild(int groupPosition, int childPosition) {
    return this.children[groupPosition][childPosition];
    }

    @Override // 取得子项ID
    public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
    }

    // 自定义方法,建立文本
    public TextView buildTextView() {
    // 指定布局参数
    AbsListView.LayoutParams param = new AbsListView.LayoutParams(
    ViewGroup.LayoutParams.FILL_PARENT, 35);
    // 创建TextView
    TextView textView = new TextView(this.context);
    textView.setLayoutParams(param); // 设置布局参数
    textView.setTextSize(15.0f); // 设置文字大小
    textView.setGravity(Gravity.LEFT); // 左对齐
    textView.setPadding(40, 8, 3, 3); // 间距
    return textView; // 返回组件

    }

    @Override // 返回子项组件
    public View getChildView(int groupPosition, int childPosition,
    boolean isLastChild, View convertView, ViewGroup parent) {
    // 创建TextView
    TextView textView = buildTextView();
    // 设置显示文字
    textView.setText(getChild(groupPosition,childPosition).toString());
    return textView;

    }

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

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

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

    @Override // 取得组ID
    public long getGroupId(int groupPosition) {
    return groupPosition;
    }

    @Override // 取得组显示组件
    public View getGroupView(int groupPosition, boolean isExpanded,
    View convertView, ViewGroup parent) {
    // 建立组件
    TextView textView = buildTextView();
    // 设置文字
    textView.setText(this.getGroup(groupPosition).toString());
    return textView;
    }

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

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

    }

    MyExpandableListViewDemo.java

    View Code
    package org.lxh.demo;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.view.View;
    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 MyExpandableListViewDemo extends Activity {
    // 定义树型组件
    private ExpandableListView elistview = null;
    // 定义适配器对象
    private ExpandableListAdapter adapter = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 默认布局管理器
    super.setContentView(R.layout.main);
    // 取得组件
    this.elistview = (ExpandableListView) super.findViewById(R.id.elistview);
    // 实例化适配器
    this.adapter = new MyExpandableListAdapter(this);
    // 设置适配器
    this.elistview.setAdapter(this.adapter);
    // 注册上下文菜单
    super.registerForContextMenu(this.elistview);
    // 设置子项单击事件
    this.elistview.setOnChildClickListener(new OnChildClickListenerImpl());
    // 设置组项单击事件
    this.elistview.setOnGroupClickListener(new OnGroupClickListenerImpl());
    // 关闭分组事件
    this.elistview.setOnGroupCollapseListener(new OnGroupCollapseListenerImpl());
    // 展开分组事件
    this.elistview.setOnGroupExpandListener(new OnGroupExpandListenerImpl());
    }

    private class OnChildClickListenerImpl implements OnChildClickListener {
    @Override
    public boolean onChildClick(ExpandableListView parent, View v,
    int groupPosition, int childPosition, long id) {
    // 显示提示框
    Toast.makeText(
    MyExpandableListViewDemo.this,
    "子选项被选中,groupPosition = " + groupPosition
    + ",childPosition = " + childPosition,
    Toast.LENGTH_SHORT).show();
    return false;
    }

    }

    private class OnGroupClickListenerImpl implements OnGroupClickListener {

    @Override
    public boolean onGroupClick(ExpandableListView parent, View v,
    int groupPosition, long id) {
    // 显示提示框
    Toast.makeText(MyExpandableListViewDemo.this,
    "分组被选中,groupPosition = " + groupPosition,
    Toast.LENGTH_SHORT).show();
    return false;
    }

    }

    private class OnGroupCollapseListenerImpl implements
    OnGroupCollapseListener {

    @Override
    public void onGroupCollapse(int groupPosition) {
    // 显示提示框
    Toast.makeText(MyExpandableListViewDemo.this,
    "关闭分组,groupPosition = " + groupPosition,
    Toast.LENGTH_SHORT).show();
    }

    }

    private class OnGroupExpandListenerImpl implements OnGroupExpandListener {

    @Override
    public void onGroupExpand(int groupPosition) {
    // 显示提示框
    Toast.makeText(MyExpandableListViewDemo.this,
    "打开分组,groupPosition = " + groupPosition,
    Toast.LENGTH_SHORT).show();
    }
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view,
    ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, view, menuInfo);
    ExpandableListView.ExpandableListContextMenuInfo info =
    (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
    // 取得操作的菜单项
    int type = ExpandableListView.getPackedPositionType(info.packedPosition);
    // 取得菜单项所在的菜单组
    int group = ExpandableListView.getPackedPositionGroup(info.packedPosition);
    // 取得子菜单项的索引
    int child = ExpandableListView.getPackedPositionChild(info.packedPosition);
    // 显示提示框
    Toast.makeText(MyExpandableListViewDemo.this,
    "type = " + type + ",group = " + group + ",child = " + child,
    Toast.LENGTH_SHORT).show();
    }
    }

    AndroidManifest.xml

    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package
    ="org.lxh.demo"
    android:versionCode
    ="1"
    android:versionName
    ="1.0">
    <uses-sdk android:minSdkVersion="5" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".MyExpandableListViewDemo"
    android:label
    ="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>

    </application>
    </manifest>



  • 相关阅读:
    上传图片并实现本地预览
    a标签传递参数
    HTTP错误 404.17–Not Found 请求的内容似乎是脚本,因而将无法有静态文件处理程序来处理
    VM虚拟机无法拖拽、粘贴、复制
    ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
    Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
    Oracle获取表结构信息:表名、是否视图、字段名、类型、长度、非空、主键
    SQLServer2005,2000获取表结构:字段名、类型、长度、主键、非空、注释
    c# float和double的“坑”
    VS活动解决方案平台
  • 原文地址:https://www.cnblogs.com/androidsj/p/2415911.html
Copyright © 2011-2022 走看看