ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法
如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String>
那么,如何实现适配器中的点击事件执行activity界面中的方法呢?
实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,然后在activity界面中MyArrayAdapter实例实现这个接口。
较为完整的代码见上文。
1、MyArrayAdapter 关键代码
自定义接口和方法的代码如下:
//列表项的单击事件监听接口
public interface OnMyItemClickListener{
void OnMyItemClick(String itemInfo);
} public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener = onMyItemClickListener;
} private OnMyItemClickListener onMyItemClickListener; //列表项的长按事件监听接口
public interface OnMyItemLongClickListener{
void OnMyItemLongClick(String itemInfo);
}
public void setOnMyItemLongClickListener(OnMyItemLongClickListener onMyItemLongClickListener){
this.onMyItemLongClickListener = onMyItemLongClickListener;
}
private OnMyItemLongClickListener onMyItemLongClickListener;
使用接口代码如下:
//列表项的单击事件
view.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
TextView itemText = (TextView) v.findViewById(R.id.listitemText);
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
if(onMyItemClickListener != null){
onMyItemClickListener.OnMyItemClick(itenTitle);//执行Activity界面中的方法
} }
}); //列表项的长按事件
view.setOnLongClickListener(new OnLongClickListener() { @Override
public boolean onLongClick(View v) {
TextView itemText = (TextView) v.findViewById(R.id.listitemText);
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle); if(onMyItemLongClickListener != null){
onMyItemLongClickListener.OnMyItemLongClick(itenTitle);//执行Activity界面中的方法
} return false;
}
});
2、Activity界面的使用代码如下:
private MyArrayAdapter myarrayAdapter;//自定义的历史记录列表的数组适配器 //列表项的点击事件
myarrayAdapter.setOnMyItemClickListener(new OnMyItemClickListener() {
@Override
public void OnMyItemClick(String itemInfo) {
//赋值给AutoCompleteTextView
autoTextView.setText(itemInfo);
}
}); //列表项的长按事件
myarrayAdapter.setOnMyItemLongClickListener(new OnMyItemLongClickListener() {
@Override
public void OnMyItemLongClick(String itemInfo) {
// TODO Auto-generated method stub
cleanOneHistory(itemInfo);
}
});
完整的自定义适配器类代码:
package com.why.autosearch.adapter; import java.util.List; import com.why.autosearch.activity.R; import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView; public class MyArrayAdapter extends ArrayAdapter<String>{ private int listitemResourceid;//列表项的布局文件ID
private Context mcontext; public MyArrayAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
listitemResourceid = resource;
mcontext = context;
} /**
* 重写getView*/
public View getView(int position, View convertView, ViewGroup parent) { String listItemStr = getItem(position); View view = null;
ViewHolder holder = null; if(convertView == null){
view = LayoutInflater.from(mcontext).inflate(listitemResourceid, parent, false);
holder = new ViewHolder();
holder.listitemText = (TextView) view.findViewById(R.id.listitemText);
view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder) view.getTag();
} //列表项的标题
holder.listitemText.setText(listItemStr); //列表项的单击事件
view.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
TextView itemText = (TextView) v.findViewById(R.id.listitemText);
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
if(onMyItemClickListener != null){
onMyItemClickListener.OnMyItemClick(itenTitle);//执行Activity界面中的方法
} }
}); //列表项的长按事件
view.setOnLongClickListener(new OnLongClickListener() { @Override
public boolean onLongClick(View v) {
TextView itemText = (TextView) v.findViewById(R.id.listitemText);
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle); if(onMyItemLongClickListener != null){
onMyItemLongClickListener.OnMyItemLongClick(itenTitle);//执行Activity界面中的方法
} return false;
}
}); return view;
} class ViewHolder{
TextView listitemText;
} //列表项的单击事件监听接口
public interface OnMyItemClickListener{
void OnMyItemClick(String itemInfo);
} public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener = onMyItemClickListener;
} private OnMyItemClickListener onMyItemClickListener; //列表项的长按事件监听接口
public interface OnMyItemLongClickListener{
void OnMyItemLongClick(String itemInfo);
}
public void setOnMyItemLongClickListener(OnMyItemLongClickListener onMyItemLongClickListener){
this.onMyItemLongClickListener = onMyItemLongClickListener;
}
private OnMyItemLongClickListener onMyItemLongClickListener;
}
MyArrayAdapter
ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法的更多相关文章
- ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法
ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件. 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文 ...
- Android ListView 子控件点击事件
android:descendantFocusability beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只 ...
- Silverlight中在MVVM模式下对DatagridRow选择控件封装
在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成 ...
- Winform下让你的DataGridView控件支持点语法(即显示list中的子对象属性)
前言: 不想看前言的直接去看正文吧!另外文末有彩蛋. DataGridView可以支持多种数据源格式,比如DataTable和List. DataTable没啥特殊的,本身就是一张二维的表,可以和Da ...
- 如何写一套下拉刷新的控件?《MJRefresh原理浅析》(附Demo下载地址)
相信大家有很多人在做项目的时候都在使用MJRefresh 控件来实现下拉刷新的功能: MJRefresh经过不断的重构与更新迭代,现在不管是功能上还是代码结构上都是相当不错的,都是很值我们去学习的. ...
- 我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法
开发中常常需要自己定义Listview,去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点. 如果你的自定义Li ...
- Delphi下使用Oracle Access控件组下TOraSession控件链接
Delphi下使用Oracle Access控件组下TOraSession控件链接数据库,使用 orsn1.Options.Direct:=true; orsn1.Server:=IP:Port: ...
- IE下JS接受ActiveX控件方法
1.常规写法 <SCRIPT type="text/javascript" FOR="activexID" EVENT="onXXXevent( ...
- cocos2d-html5 简易 下拉表单 控件
刚才在CH5的群里问了问 有没有大侠写过 下拉表单控件啊! 没人鸟窝 ,DZ老师表示非常伤心啊 ,于是乎 自己写一个把 共享给大家. 效果图上一个 仅仅实现了一个最最主要的控件 非常eas ...
随机推荐
- Spring + JdbcTemplate + JdbcDaoSupport examples
In Spring JDBC development, you can use JdbcTemplate and JdbcDaoSupport classes to simplify the over ...
- Hibernate监听器
Hibernate的事件监听机制 Hibernate中的事件监听机制可以对Session对象的动作进行监听,一旦发生了特殊的事件,Hibernate就会执行监听器中的事件处理方法 在某些功能的设计中, ...
- 学习LINQ,发现一个好的工具。LINQPad!!
今日学习LINQ,发现一个好的工具.LINQPad!! 此工具的好处在于,不需要在程序内执行,直接只用工具测试.然后代码通过即可,速度快,简洁方便. 可以生成其LINQ查询对应的lambda和SQL语 ...
- 来自JavaScript Garden摘取
1.数字类型不能用作对象,因为javascript解析器会将点号(.)解析成浮点型(as a floating point literal),比如:2.toString();会导致语法从错误,解决方法 ...
- Bootstrap栅格系统(布局)
栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅格系 ...
- EcShop之路-Smarty
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- GLSL实现Fresnel And Chromatic aberration 【转】
http://blog.csdn.net/a3070173/archive/2008/11/13/3290091.aspx 使用Shader实现菲涅尔和颜色色散效果很简单,在Cg教程和OpenGL S ...
- delphi 带历史信息的菜单
带历史信息的菜单 实例说明 在有些软件中,菜单栏中可以记录已经打开过的文件信息,使用户操作简单.快捷.当用户要打开已打开过的文件时,不需要重复查找,只需选择菜单中打开过的文件,即可实现打开该文件的操作 ...
- C语言调用Lua函数
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪. 那个时期,人们常常称互联网为赛博空间.现在工作了,大量的零碎时间用于上微博,知乎,QQ.这些碎片化的阅读 ...
- 一入python深似海--dict(字典)的一种实现
以下是python中字典的一种实现.用list数据结构实现字典.详细是这种:[[(key1,value1),(key2,value2),...],[],[],...] 内部每个hash地址是一个lis ...