码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-08 00:20:58      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

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界面中的方法

标签:

原文地址:http://www.cnblogs.com/whycxb/p/4859732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!