Android程序设计:ExpandableListView或ListView的Item的子事件写法
2015-08-22 11:37
471 查看
本文作为Android初学不久的我根据自己阅读过的网络文章的理解和体会的一个总结。
ExpandableListView或ListView的Item的子事件的两种:
2.缺点:就是感觉程序写在一堆了,没办法与UI Activity的后台更多数据互交(除非把要的数据都传递到Adapter里面),无法回调其他内容。
初学的我开始用这种写法。后来需求不断变化,需要互交的数据比较多了。不得已改用第二种方法。
第一种写法代码如下:
2.缺点:Adapter和UI Activity都要多写点代码。
Adapter代码思路:
xxAdapter继承相应的BaseExpandableListAdapter或者BaseAdapter
UI Activity事件写法:
仅供参考!
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);
仅供参考!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories