加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Android中的多级列表的实施

发布时间:2021-12-15 11:00:07 所属栏目:教程 来源:互联网
导读:看看今天实现的Android中个多级列表的功能,其实这就是一个小组件,但是如果用好了,可以实现很大的功能呢!接着,有点累,什么都不说了,看看看实现的过程就可以了,挺简单的! 1.看看布局文件main.xml文件 ?xml version=1.0 encoding=utf-8? LinearLayout

看看今天实现的Android中个多级列表的功能,其实这就是一个小组件,但是如果用好了,可以实现很大的功能呢!接着,有点累,什么都不说了,看看看实现的过程就可以了,挺简单的!
1.看看布局文件main.xml文件
 
<?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"  
    android:background="@drawable/bg"   
    >  
    <TextView   
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="那些上过与即将被上的大学课程:"  
        android:textColor="#FF6100"  
        android:textSize="20dp"  
          
          
        />  
<ExpandableListView   
    android:id="@+id/elistview"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:layout_marginLeft="5dp"  
     
      
    />  
</LinearLayout>  
2.接着看看主活动mainActivity.java
package com.wang;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.view.ContextMenu;  
import android.view.View;  
import android.view.Window;  
import android.view.WindowManager;  
import android.view.ContextMenu.ContextMenuInfo;  
import android.widget.ExpandableListAdapter;  
import android.widget.ExpandableListView;  
import android.widget.Toast;  
import android.widget.ExpandableListView.OnChildClickListener;  
import android.widget.ExpandableListView.OnGroupClickListener;  
import android.widget.ExpandableListView.OnGroupCollapseListener;  
import android.widget.ExpandableListView.OnGroupExpandListener;  
  
public class MaintActivity extends Activity {  
    // 创建一个上下文菜单的方法   
    public void onCreateContextMenu(ContextMenu menu, View v,  
            ContextMenuInfo menuInfo) {  
  
        super.onCreateContextMenu(menu, v, menuInfo);  
  
        // 一个垂直滚动的两级列表。取得菜单项   
        ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;  
        // 获得这个类型 的位置   
        int type = ExpandableListView  
                .getPackedPositionType(info.packedPosition);  
        // 取得所在组的索引   
        int group = ExpandableListView  
                .getPackedPositionGroup(info.packedPosition);  
        // 取得子菜单的索引   
        int child = ExpandableListView  
                .getPackedPositionGroup(info.packedPosition);  
  
        Toast.makeText(MaintActivity.this,  
                "类型 =" + type + "  分组:" + group + "  子选项:" + child,  
                Toast.LENGTH_LONG).show();  
  
    }  
  
    private ExpandableListView eListView = null;  
    private ExpandableListAdapter adapter = null;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
  
        // 去除标题,   
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
        // 取消状态栏,充满全屏   
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
                WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  
        super.onCreate(savedInstanceState);  
        super.setContentView(R.layout.main);  
  
        // 实例化组件   
        this.eListView = (ExpandableListView) findViewById(R.id.elistview);  
  
        // 声明一个adapter对象   
        adapter = new myExpendableadapler(this);  
        // 设置适配器提供了数据   
        this.eListView.setAdapter(this.adapter);  
  
        //  注册一个上下文菜单显示给定的视图(多个视图可以显示上下文菜单)。   
        super.registerForContextMenu(this.eListView);  
  
        // 设置点击时候触发的事件 1,子选项点击事件 2。父选项单击事件 3.分组打开事件 4.分组关闭事件   
        this.eListView.setOnChildClickListener(new ChildClickListener());  
        this.eListView.setOnGroupClickListener(new GroupClickListener());  
        this.eListView.setOnGroupExpandListener(new GroupExpandListener());  
        this.eListView.setOnGroupCollapseListener(new GroupCollapseListener());  
  
    }  
  
    // /1,子选项点击事件   
    private class ChildClickListener implements OnChildClickListener {  
  
        public boolean onChildClick(ExpandableListView parent, View v,  
                int groupPosition, int childPosition, long id) {  
            Toast  
                    .makeText(  
                            MaintActivity.this,  
                            "子选项被选中,所的组:" + groupPosition + "  子选项的位置:"  
                                    + childPosition, Toast.LENGTH_LONG).show();  
            return false;  
        }  
  
    }  
  
    // 2。父选项单击事件   
    private class GroupClickListener implements OnGroupClickListener {  
  
        public boolean onGroupClick(ExpandableListView parent, View v,  
                int groupPosition, long id) {  
            Toast.makeText(MaintActivity.this, "分组选项被选中,所在组: " + groupPosition,  
                    Toast.LENGTH_LONG).show();  
            return false;  
        }  
  
    }  
  
    // 3.分组打开事件   
    private class GroupExpandListener implements OnGroupExpandListener {  
  
        public void onGroupExpand(int groupPosition) {  
            // TODO Auto-generated method stub   
            Toast.makeText(MaintActivity.this, "打开分组,所在组:" + groupPosition,  
                    Toast.LENGTH_LONG).show();  
        }  
  
    }  
  
    // 4.分组关闭事件   
    private class GroupCollapseListener implements OnGroupCollapseListener {  
  
        public void onGroupCollapse(int groupPosition) {  
            Toast.makeText(MaintActivity.this, "关闭分组,所在组:" + groupPosition,  
                    Toast.LENGTH_LONG).show();  
        }  
  
    }  
  
}  
3.主活动的实现需要一个适配器,myExpendableadapler.java
package com.wang;  
  
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;  
  
public class myExpendableadapler extends BaseExpandableListAdapter {  
    // 组名称   
    private String[] group = new String[] { "专业课", "公共课", "选修课", "选逃课" };  
    // 子选项的名字   
    private String[][] child = new String[][] {  
            { "C语言", "java程序设计基础教程", "数据库原理与应用", "数据结构", "linux下的嵌入式C语言编程",  
                    "linux桌面应用程序设计", "计算机操作系统", "计算机组成原理" },  
            { "大学英语", "马克思哲学原理", "形势与政策", "ARM体系结构", "嵌入式软件开发", "软件工程" },  
            { "音乐鉴赏", "市场营销", "android开发与应用", "Visual C++实用教程", "算法分析与程序设计" },  
            { "马克思哲学原理", "形势与政策" } };  
    private Context context = null;  
  
    // 构造函数   
    public myExpendableadapler(Context context) {  
  
        this.context = context;  
    }  
  
    public Object getChild(int groupPosition, int childPosition) {  
  
        return this.child[groupPosition][childPosition];  
    }  
  
    public long getChildId(int groupPosition, int childPosition) {  
  
        return childPosition;  
    }  
  
    private TextView buildTextView() {  
        //LayoutParams AbsListView扩展提供一个位置来保存视图类型。   
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(  
                ViewGroup.LayoutParams.FILL_PARENT, 40);  
          
        TextView textView = new TextView(this.context);  
        textView.setLayoutParams(params);  
        //大小   
        textView.setTextSize(15.0f);  
        textView.setGravity(Gravity.LEFT+3);  
        textView.setPadding(40, 8, 3, 3);  
        return textView;  
    }  
  
    public View getChildView(int groupPosition, int childPosition,  
            boolean isLastChild, View convertView, ViewGroup parent) {  
        TextView textView = new TextView(this.context);  
        //得到每组的子选项并转换成字符串   
        textView.setText(this.getChild(groupPosition, childPosition).toString());  
  
        return textView;  
    }  
//统计子选项的个数   
    public int getChildrenCount(int groupPosition) {  
        // TODO Auto-generated method stub   
        return this.child[groupPosition].length;  
    }  
//得到复选项的位置   
    public Object getGroup(int groupPosition) {  
        // TODO Auto-generated method stub   
        return this.group[groupPosition];  
    }  
    //得到复选项的个数   
    public int getGroupCount() {  
        // TODO Auto-generated method stub   
        return this.group.length;  
    }  
    //得到复选项的id   
    public long getGroupId(int groupPosition) {  
        // TODO Auto-generated method stub   
        return groupPosition;  
    }  
  
    public View getGroupView(int groupPosition, boolean isExpanded,  
            View convertView, ViewGroup parent) {  
        // TODO Auto-generated method stub   
        TextView textView = this.buildTextView();  
        textView.setText(this.getGroup(groupPosition).toString());  
        return textView;  
    }  
//是否子选项和父选项id是稳定在改变底层数据。   
    public boolean hasStableIds() {  
        // TODO Auto-generated method stub   
        return true;  
    }  
//p判断子选项是否可以选择   
    public boolean isChildSelectable(int groupPosition, int childPosition) {  
        // TODO Auto-generated method stub   
        return true;  
    }  
  
}  
4.接着就可以看看实现的效果了:

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读