ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件。

实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文本区域和图标区域的OnClickListener,然后在activity界面中MyArrayAdapter实例实现这个接口。

1、listitem布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical" > <LinearLayout
android:id="@+id/listitemTextLayout"
android:layout_width="0.0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/listitemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="18sp"
android:textColor="#737373"
android:gravity="center_vertical"
android:padding="15dp"
/>
</LinearLayout> <LinearLayout
android:id="@+id/listitemImgLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusable="true"
android:clickable="true">
<ImageView
android:id="@+id/listitemImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/input_delete"
android:gravity="center_vertical"
android:contentDescription="@string/app_name"
android:padding="15dp"/>
</LinearLayout> </LinearLayout>

list_item_text_image_1

2、MyOtherArrayAdapter关键代码
自定义接口和方法的代码如下:

//列表项文字区域的点击事件监听接口
public interface OnMyItemClickListener{
void OnMyItemClick(String itemInfo);
} public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener = onMyItemClickListener;
} private OnMyItemClickListener onMyItemClickListener; //列表项图标区域的点击事件监听接口
public interface OnMyItemClearClickListener{
void OnMyItemClearClick(String itemInfo);
}
public void setOnMyItemClearClickListener(OnMyItemClearClickListener onMyItemClearClickListener){
this.onMyItemClearClickListener = onMyItemClearClickListener;
}
private OnMyItemClearClickListener onMyItemClearClickListener;

使用接口代码如下:

final TextView itemText = holder.listitemText;

        //列表项文字区域的点击事件
holder.listitemTextLayout.setOnClickListener(new OnClickListener() { public void onClick(View v) {
if(onMyItemClickListener != null){
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
onMyItemClickListener.OnMyItemClick(itenTitle);
}
}
}); //列表项图标区域的点击事件 holder.listitemImgLayout.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(onMyItemClearClickListener != null){
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
onMyItemClearClickListener.OnMyItemClearClick(itenTitle);
}
}
});

3、Activity界面的使用代码如下:

private MyOtherArrayAdapter myarrayAdapter;//自定义的历史记录列表的数组适配器

//实现自定义适配器的监听接口
private void initMyAdapterListener(){ if(myarrayAdapter != null){
//列表项文字区域的点击事件
myarrayAdapter.setOnMyItemClickListener(new OnMyItemClickListener() { @Override
public void OnMyItemClick(String itemInfo) {
//赋值给AutoCompleteTextView
autoTextView.setText(itemInfo);
//搜索输入框获取焦点
autoTextView.setFocusable(true);//view是否具有接受焦点的资格
autoTextView.setFocusableInTouchMode(true);//对应在触摸模式下,设置是否有焦点来响应点触的资格
autoTextView.requestFocus();//获取焦点
autoTextView.requestFocusFromTouch();//对应在触摸模式下,获取焦点 autoTextView.setSelection(itemInfo.length());//光标移动到文字后面 }
});
//列表项图标区域的点击事件
myarrayAdapter.setOnMyItemClearClickListener(new OnMyItemClearClickListener() { @Override
public void OnMyItemClearClick(String itemInfo) {
cleanOneHistory(itemInfo);
}
});
} }

完整的自定义适配器类代码:

package com.why.autosearch.adapter;

import java.util.List;

import com.why.autosearch.activity.R;
import com.why.autosearch.adapter.MyArrayAdapter.ViewHolder; import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; public class MyOtherArrayAdapter extends ArrayAdapter<String>{ private int listitemResourceid;//列表项的布局文件ID
private Context mcontext; public MyOtherArrayAdapter(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);
holder.listitemImg = (ImageView) view.findViewById(R.id.listitemImg); holder.listitemTextLayout = (LinearLayout) view.findViewById(R.id.listitemTextLayout);
holder.listitemImgLayout = (LinearLayout) view.findViewById(R.id.listitemImgLayout); view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder) view.getTag();
} //列表项的标题
holder.listitemText.setText(listItemStr); final TextView itemText = holder.listitemText; //列表项文字区域的点击事件
holder.listitemTextLayout.setOnClickListener(new OnClickListener() { public void onClick(View v) {
if(onMyItemClickListener != null){
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
onMyItemClickListener.OnMyItemClick(itenTitle);
}
}
}); //列表项图标区域的点击事件 holder.listitemImgLayout.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(onMyItemClearClickListener != null){
String itenTitle = itemText.getText().toString();
Log.v("MyArrayAdapter", itenTitle);
onMyItemClearClickListener.OnMyItemClearClick(itenTitle);
}
}
}); return view;
} class ViewHolder{
LinearLayout listitemTextLayout;
LinearLayout listitemImgLayout; TextView listitemText;
ImageView listitemImg;
} //列表项文字区域的点击事件监听接口
public interface OnMyItemClickListener{
void OnMyItemClick(String itemInfo);
} public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener){
this.onMyItemClickListener = onMyItemClickListener;
} private OnMyItemClickListener onMyItemClickListener; //列表项图标区域的点击事件监听接口
public interface OnMyItemClearClickListener{
void OnMyItemClearClick(String itemInfo);
}
public void setOnMyItemClearClickListener(OnMyItemClearClickListener onMyItemClearClickListener){
this.onMyItemClearClickListener = onMyItemClearClickListener;
}
private OnMyItemClearClickListener onMyItemClearClickListener;
}

MyOtherArrayAdapter

效果图:

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

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

    如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity ...

  2. Android ListView 子控件点击事件

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

  3. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”

    接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...

  4. Android自定义View(RollWeekView-炫酷的星期日期选择控件)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53420889 本文出自:[openXu的博客] 目录: 1分析 2定义控件布局 3定义Cus ...

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

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

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

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

  7. WPF开发随笔收录-自定义图标控件

    一.前言 1.在以前自学的过程中,软件需要使用到图标的时候,总是第一个想法是下载一个图片来充当图标使用,但实际得出来的效果会出现模糊的现象.后来网上学习了字体图标库的用法,可以在阿里云矢量图网站那里将 ...

  8. 自定义ScrollView 实现上拉下拉的回弹效果--并且子控件中有Viewpager的情况

    onInterceptTouchEvent就是对子控件中Viewpager的处理:左右滑动应该让viewpager消费 public class MyScrollView extends Scroll ...

  9. 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

    最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...

随机推荐

  1. DelphiXE8怎么使用调试模式

    需求:在开发Android程序时,大家一直是使用ShowMessage.其实XE是支持下断点的. 操作: 1.小米手机用USB线,连到电脑上. 2.小米手机-设置-关于手机-"MIUI版本& ...

  2. thymeleaf中的内联[ [ ] ]

    一.文本内联 [[…]]之间的表达式在Thymeleaf被认为是内联表达式,在其中您可以使用任何类型的表达式,也会有效th:text属性. <p>Hello, [[${session.us ...

  3. [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件

    A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...

  4. jQuery基础学习4——jQuery容错性

    使用jQuery选择器不仅比使用传统的getElementById()和getElementsByTagName()函数简洁得多,而且还能避免某些错误. <script type="t ...

  5. #pragma comment使用

    编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下! 在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. #pragma once : 这是一个 ...

  6. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  7. [JS 基础] touchEvent中的changedTouches,targetTouches和touches的区别

    对于移动端开发中 touchEvent(触摸事件) 中changedTouches,targetTouches和touches的区别往往不容易弄清,故特意查询了 MDN相关资料 1. 其中,对 cha ...

  8. U3D中的协同等待函数

    WaitForSeconds.WaitForseconds等待函数; 创建一个yield指令,来等待给定的秒数; using UnityEngine; using System.Collections ...

  9. oracle安装界面中文乱码解决

    在安装oracle时如果我们用的是英文安装没有任何问题,但是我要安装中文的,结果中文界面就出现了乱码了,后来网上找了原因是要安装中文包才可以,下面我来介绍一下. 在Linux的X window里安装o ...

  10. HTML5 - HTML5 postMessage API 注意事项

    一:发送 window.postMessage("Hello, world", "http://127.0.0.1:8080"); 注意,必须要加上http:/ ...