Android Api Demos登顶之路(107)View-->ExpanableLists-->Custom Adapter

/*本例与接下来的两个demo演示了可伸缩列表ExpandableList的用法,着重演示的要为ExpandableList
 * 设置数据适配器的三种情况。本例演示的是通过继承BaseExpandableListAdapter类来自定义数据适配器。
 * 为简便起见直接使用了ExpandableListActivity*/
public class MainActivity extends ExpandableListActivity {
    private ExpandableListAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mAdapter=new MyExpandableListAdapter();
        setListAdapter(mAdapter);

        //为ExpandListView注册上下文菜单(长按View时触发)
        registerForContextMenu(getExpandableListView());
    }

    //创建上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        //设置标题
        menu.setHeaderTitle("Sample View");
        //添加子菜单项
        menu.add(0, 0, 0, "SampleAction");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        //获取可伸缩列表的上下文菜单的信息
        ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo) item.getMenuInfo();
        //targetView:点击ExpandableListView的某个条目时展示上下文菜单的View(也就是点击的那个条目)
        String title=((TextView)menuInfo.targetView).getText().toString();
        //获取伸缩列表中所选项的类型(group或child)
        int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);
        if(type==ExpandableListView.PACKED_POSITION_TYPE_CHILD){
            int groupPos=ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
            int childPos=ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);
            Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,
                    Toast.LENGTH_SHORT).show();
            return true;
        }else if(type==ExpandableListView.PACKED_POSITION_TYPE_GROUP){
            int groupPos=ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
            Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }

    private class MyExpandableListAdapter extends BaseExpandableListAdapter {
        // 定义数据源
        private String[] groups = { "People Names", "Dog Names", "Cat Names",
                "Fish Names" };
        private String[][] children = {
                { "Arnold", "Barry", "Chuck", "David" },
                { "Ace", "Bandit", "Cha-Cha", "Deuce" },
                { "Fluffy", "Snuggles" }, { "Goldy", "Bubbles" } };

        @Override
        public int getGroupCount() {
            return groups.length;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return children[groupPosition].length;
        }

        @Override
        public String getGroup(int groupPosition) {
            return groups[groupPosition];
        }

        @Override
        public String getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];
        }

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

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        // 是否有稳定的Id,如果有则会根据id来决定列表中数据的显示顺序
        @Override
        public boolean hasStableIds() {
            return true;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            // 获取一个通过的TextView用于显示Group的数据
            TextView tv = getGenericView();
            tv.setText(groups[groupPosition]);
            return tv;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            // 获取一个通过的TextView用于显示child的数据
            TextView tv = getGenericView();
            tv.setText(children[groupPosition][childPosition]);
            return tv;
        }

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

        // 定义一个通用的TextView
        private TextView getGenericView() {
            // AbsListView用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 64);
            TextView textView = new TextView(MainActivity.this);
            textView.setLayoutParams(lp);
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // 设置文本的开始位置
            textView.setPaddingRelative(36, 0, 0, 0);
            //textView.setPaddingRelative(72, 0, 0, 0);
            // 设置文本的排列方式
            textView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
            //textView.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
            return textView;
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设是在国家政策推动下,为深化教育改革、提升教育质量和管理效率而提出的重要项目。该项目旨在通过信息化手段,解决传统教育中存在的资源分散、管理混乱等问题,实现教育资源的高效利用和教学质量的全面提升。 目前,教育信息化虽取得一定进展,但面临“孤岛架构”的挑战,包括硬件资源无法共享、数据孤岛、应用孤岛等问题,导致资源浪费和管理效率低下。为此,智慧校园的建设目标聚焦于家校沟通便捷化、校园管理科学化、校园生活轻松化、课堂教学互动化和校园设施智能化,以提高教学效率和学生学习体验。 智慧校园的核心价值在于构建先进的网络教学平台和管理信息系统,实现教学资源的高效配置和利用,促进师生互动,提高管理效率,降低成本,构建健康高雅的生活环境。解决方案涵盖综合应用平台规划、系统架构设计、媒体发布、数字会议系统等,通过后台服务层、基础接入层和用户接入层的有机结合,实现智慧校园的全面功能。 智慧校园管理平台作为核心组成部分,提供模块化体系,包括公开课、直播、教学资源等23大应用,支持与第三方接口对接,实现多级管理。电教预约管理平台通过移动端APP或web后台简化预约流程,提高教室和会议室资源利用率,支持会议预订、审批、信息发布和环境管控。 教育录播系统和云平台支持教师制作和分享优质教学资源,进行在线组卷和评卷,同时提供学生应用,如高清视频录制、在线直播和互动交流,促进教学资源的共享和教育均衡化发展。这些系统的整合应用,将极大地推动教育信息化进程,实现教育资源的最大化利用和教育质量的全面提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值