【ExpandableListView】---2 长按和点击处理

1、 方法一:在创建子项控件的时候对控件整体进行事件的设置

控件的初始化在ExpandableListView的适配器中,在初始化的时候设置点击事件和长按事件
这里只设置了ChildView的点击事件和长按事件

//设置组里面的项的界面
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    View view = View.inflate(MainActivity.this, R.layout.child_view, null);
    view.setClickable(true);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(
                    MainActivity.this,
                    "子项点击事件",
                    Toast.LENGTH_SHORT).show();
        }
    });
    view.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(
                    MainActivity.this,
                    "长按中.......",
                    Toast.LENGTH_SHORT).show();
            return true;
        }
    });

注意:长按事件中的返回值要是true, 不然执行了长按事件之后还会执行点击事件

2、 方法二:使用ExpandableListView设置子项点击事件进行操作

ExpandableListView 设置OnLongClickListener实现onclick方法,在该方法中并不能比较直观的获取到控件的位置信息。注意下面的获取方式:

//设置item点击的监听器
elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

    @Override
    public boolean onChildClick(ExpandableListView parent, View v,
                                int groupPosition, int childPosition, long id) {
        Toast.makeText(
                MainActivity.this,
                "点击\ngroupPosition=" + groupPosition + ";childPosition=" + childPosition,
                Toast.LENGTH_SHORT).show();

        return false;
    }
});
//设置item长按事件
elv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        int groupId = -1;
        int childId = -1;
        long packedPosition = elv.getExpandableListPosition(position);
        int type = ExpandableListView.getPackedPositionType(packedPosition);
        switch (type) {
            case 0://表示当前选中项为父条目,即Group
                groupId = ExpandableListView.getPackedPositionGroup(packedPosition);
                break;
            case 1://表示当前选中项为子条目
                groupId = ExpandableListView.getPackedPositionGroup(packedPosition);//当前子条目所在的Group
                childId = ExpandableListView.getPackedPositionChild(packedPosition);//当前子条目id
                break;
            default:
                break;
        }
        Toast.makeText(
                MainActivity.this,
                "长按\nGroupId=" + groupId + ";childId=" + childId,
                Toast.LENGTH_SHORT).show();
        return true;
    }
});

两者的效果是一样的,只是学习阶段,还没有遇到其他问题
效果如下:

这里写图片描述

demo:
http://download.csdn.net/detail/u012391876/9607876

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值