如果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界面中的方法的更多相关文章

  1. ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法

    ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件. 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文 ...

  2. Android ListView 子控件点击事件

    android:descendantFocusability beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只 ...

  3. Silverlight中在MVVM模式下对DatagridRow选择控件封装

    在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成 ...

  4. Winform下让你的DataGridView控件支持点语法(即显示list中的子对象属性)

    前言: 不想看前言的直接去看正文吧!另外文末有彩蛋. DataGridView可以支持多种数据源格式,比如DataTable和List. DataTable没啥特殊的,本身就是一张二维的表,可以和Da ...

  5. 如何写一套下拉刷新的控件?《MJRefresh原理浅析》(附Demo下载地址)

    相信大家有很多人在做项目的时候都在使用MJRefresh 控件来实现下拉刷新的功能: MJRefresh经过不断的重构与更新迭代,现在不管是功能上还是代码结构上都是相当不错的,都是很值我们去学习的. ...

  6. 我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

    开发中常常需要自己定义Listview,去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点. 如果你的自定义Li ...

  7. Delphi下使用Oracle Access控件组下TOraSession控件链接

    Delphi下使用Oracle Access控件组下TOraSession控件链接数据库,使用  orsn1.Options.Direct:=true;  orsn1.Server:=IP:Port: ...

  8. IE下JS接受ActiveX控件方法

    1.常规写法 <SCRIPT type="text/javascript" FOR="activexID" EVENT="onXXXevent( ...

  9. cocos2d-html5 简易 下拉表单 控件

    刚才在CH5的群里问了问  有没有大侠写过 下拉表单控件啊!  没人鸟窝 ,DZ老师表示非常伤心啊  ,于是乎  自己写一个把 共享给大家. 效果图上一个  仅仅实现了一个最最主要的控件  非常eas ...

随机推荐

  1. Spark SQL应用

    Spark Shell启动后,就可以用Spark SQL API执行数据分析查询. 在第一个示例中,我们将从文本文件中加载用户数据并从数据集中创建一个DataFrame对象.然后运行DataFrame ...

  2. java assert的用法简介

    assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...

  3. [iOS UI进阶 - 4.0] 涂鸦app Demo

    A.需求 1.超简易画图,只有一种画笔 2.清屏功能 3.回退功能 4.保存功能 5.使用了cocos2D   code source: https://github.com/hellovoidwor ...

  4. Spring @RequestHeader用法

    Spring MVC提供了 @RequestHeader注解,能够将请求头中的变量值映射到控制器的参数中.下面是一个简单的例子: import org.springframework.stereoty ...

  5. Failed to execute query: Duplicate entry '0' for key 'PRIMARY'

    今天在做php登陆和登出会插入数据到log表中,,结果报错了:如下: Failed to execute query: Duplicate entry '0' for key 'PRIMARY' SQ ...

  6. 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载

    我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...

  7. Windows下sqlmap的使用_01

    环境:win8.1 64位    一.下载 首先,需下载SqlMap以及适用于Windows系统的Python.下载地址如下:   1.1.SqlMap下载地址:https://github.com/ ...

  8. Transaction Manager Maximum Timeout

    TransactionManager.MaximumTimeout是个只读的属性, 默认只有10分钟, 要想修改它必须通过machine.config来修改. 为了单个应用而去修改这个值是不合适的. ...

  9. PostgreSQL建表动作分析

    首先,建立表: pgsql=# create table tab10(id integer); CREATE TABLE pgsql::regclass; regclass ---------- ta ...

  10. Hash Table构建

    get-item e:\test\* |format-table @{name="aa";expression={$_.name.tostring().split(".& ...