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


    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

    效果图:

  • 相关阅读:
    java Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong name: pm/main)
    javac 编译java文件提示: 程序包com.mysql.jdbc不存在
    Java开发笔记(二十四)方法的组成形式
    Java开发笔记(二十三)数组工具Arrays
    Java开发笔记(二十二)神奇的冒号
    Java开发笔记(二十一)二维数组的扩展
    Java开发笔记(二十)一维数组的用法
    Java开发笔记(十九)规律变化的for循环
    Java开发笔记(十八)上下求索的while循环
    Java开发笔记(十七)各得其所的多路分支
  • 原文地址:https://www.cnblogs.com/whycxb/p/4859732.html
Copyright © 2020-2023  润新知