• 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
  • 相关阅读:
    C#程序调用cmd.exe执行命令
    JS正则表达式之特殊符号
    Java设计模式之策略模式
    Java基础之多态
    Filter过滤器笔记1
    Servlet笔记1
    jsp笔记3(内置对象)
    jsp笔记2(编译指令与动作指令)
    jsp笔记1(基本原理与语法)
    xml文件生成与下载
  • 原文地址:https://www.cnblogs.com/whycxb/p/4859059.html
Copyright © 2020-2023  润新知