Android程序设计:ExpandableListView或ListView的Item的子事件写法

本文作为Android初学不久的我根据自己阅读过的网络文章的理解和体会的一个总结。
ExpandableListView或ListView的Item的子事件的两种:

第一种写法:将事件直接写在Adapter里面。

1.优点:比较简单,适用于不与后台数据交互操作,复杂度不高,处理简单事件。内存资源一般占用不大。
2.缺点:就是感觉程序写在一堆了,没办法与UI Activity的后台更多数据互交(除非把要的数据都传递到Adapter里面),无法回调其他内容。
初学的我开始用这种写法。后来需求不断变化,需要互交的数据比较多了。不得已改用第二种方法。
第一种写法代码如下:

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolderChild holder = null;
        ....
        //--Item的某個控件的事件處理
        holder.btnAction.setOnClickListener(new View.OnClickListener {

        @Override
        public void onClick(View v) {       
            // --直接在內部處理事件--這種寫法不靈活--打開BActivity窗體界面
            // Intent intent = new Intent(mContext, BActivity.class);       
            // intent.putExtra("data", mUserID);
            // mContext.startActivity(intent);      
        }
    });
        return convertView;
    }

第二种写法:在Adapter中增加一个事件监听接口,在内部声明一个事件监听的引用,并公开一个setter给UI Activity,UI就可以绑定相关的回调函数了。

1.优点:写法清晰,灵活,事件可以重复调用或绑定不同事件。方便回调,处理UI Activity相关数据。一般人都采用这种写法。
2.缺点:Adapter和UI Activity都要多写点代码。

Adapter代码思路:
xxAdapter继承相应的BaseExpandableListAdapter或者BaseAdapter

    private OnItemDeleteClickListener mDeleteClickListener;

    public interface OnItemDeleteClickListener {
        public void onClick(View view, int groupPosition, int childPosition);
    }

    ...

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolderChild holder = null;
        ....
        //--Item的某個控件的事件處理
        holder.btnAction.setOnClickListener(new onDeleteChildItemClick(groupPosition, childPosition));
        return convertView;
    }

    class onDeleteChildItemClick implements View.OnClickListener {
        int mGroupPosition;
        int mChildPosition;

        public onDeleteChildItemClick(int groupPositon, int childPosition) {
            this.mGroupPosition = groupPositon;
            this.mChildPosition = childPosition;
        }

        @Override
        public void onClick(View view) {
            // --觸發回調函數--將事件轉發至外部--方便擴展--
            if (mDeleteClickListener != null) {
                mDeleteClickListener.onClick(view, mGroupPosition, mChildPosition);
            }   
        }
    }

    public void setOnItemDeleteClickListener(OnItemDeleteClickListener mOnItemDeleteClickListener) {
        this.mDeleteClickListener = mOnItemDeleteClickListener;
    }

UI Activity事件写法:

    private xxAdapter.OnItemDeleteClickListener deleteClickListener = new xxAdapter.OnItemDeleteClickListener() {

        @Override
        public void onClick(View view, int groupPosition, int childPosition) {
            //處理對應xxAdapter對應的位置對應的數據。一般是 mList裡面的數據。
        }
    };

    mAdapter.setOnItemDeleteClickListener(deleteClickListener);

仅供参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值