ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android 在activity 监听自定义adapter

2021-03-16 00:01:40  阅读:245  来源: 互联网

标签:自定义 adapter tab activity import android public view


android 在activity 监听自定义adapter

1概述

在activity中会使用到adapter,adapter一般为自定义一个MyAdapter继承BaseAdapter类,有时使用场景就是在activity中监听adapter中按钮的点击事件,但是在activity中直接获取adapter的控件使用setOnClickListener方法不能生效,在网上找了下没找到解决方式,最后换种方式成功了,在此记录一下。

2.各个文件

tab.xml文件 activity关联的视图xml文件
tab_item.xml文件 adapter关联的视图xml文件
MyActivity文件 activity文件
MyAdapter文件 Adapter文件
首先说一下:按钮的点击事件可以在activity中设置(即MyActivity获取tab的button进行设置),也可以在Adapter中设置(即MyAdapter获取tab_item的button进行设置),在activity中设置的只能设置Adapter组件外的按钮(例如activity获取tab_item的button进行设置会不生效)。
下列将会使用3种方式交互,使用处有注解标示需要可自取使用
1.在adapter中获取activity传递的值并显示
2.在activity获取adapter中选中的值,进行提交
3.在activity中监听adapter中的点击事件,并作出相应的操作

tab.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/tab"
    android:layout_height="match_parent"
    tools:ignore="MissingDefaultResource">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/time"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="日期"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="名称"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/operating"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="操作"
            android:textSize="22sp" />

    </LinearLayout>

    <Button
        android:id="@+id/submit"
        android:layout_width="80dp"
        android:layout_height="35dp"
        android:layout_weight="1"
        android:text="提交"
        android:layout_alignParentRight="true"
        android:textSize="14sp"/>

    <ListView
        android:id="@+id/tab4_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text"
        android:layout_weight="1"
        android:paddingTop="36dp"></ListView>
</RelativeLayout>

tab_item.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLaxyout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:ignore="MissingDefaultResource">
     

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="Orientation">

        <TextView
            android:id="@+id/time_item"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="日期"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/name_item"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="名称"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/operating_item"
            android:layout_width="125dp"
            android:layout_height="match_parent"
            android:text="操作"
            android:textSize="22sp" />

        <Button
            android:id="@+id/start"
            android:layout_width="52dp"
            android:layout_height="wrap_content"
            android:text="开始"/>

        <CheckBox
            android:id="@+id/option"
            android:layout_width="30dp"
            android:scaleX="3"
            android:scaleY="1.5"
            android:layout_height="23dp"
            android:focusable="false"
            android:visibility="visible"
            android:clickable="true"/>

    </LinearLayout>

</LinearLaxyout>

MyAdapter文件

package com.example.zscj_app_hexin.com.example;
import com.example.zscj_app_hexin.R;


import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;



import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyAdapter extends BaseAdapter {

    List<HashMap<String, Object>> listItem ;//用于设置各个列的值
    private Context context;//必传 用于关联tab_item
    private Map<Integer,Boolean> map=new HashMap<>();//创建map 用于存储按钮列是否被点击的布尔值,checkBox用,可无需要可不用
    private Map<Integer,String> map2=new HashMap<>();//创建map列 用于存储点击了的数组,checkBox用,可无需要可不用
    private String id;//返回给activity用,可无需要可不用
    private OnButtonClickListener listener;//设置监听

    //构造方法
    public MyAdapter2(List<HashMap<String, Object>> listItem, Context context, OnButtonClickListener listener) {
        this.listItem = listItem;
        this.context = context;
        this.listener=listener;
    }

    public int getCount() {
        return listItem.size();
    }

    public Object getItem(int i) {
        return listItem.get(i);
    }

    public long getItemId(int i) {
        return i;
    }

    public Map<Integer, String> getMap2() {
        return map2;
    }


    public View getView(final int i, View view, ViewGroup viewGroup) {
        ViewHoder hd = new ViewHoder();
        if (view == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            view = layoutInflater.inflate(R.layout.tab_item, null);
            hd.name=view.findViewById(R.id.name);//进行关联
            view.setTag(hd);
        }
        final HashMap<String, Object> mlistItem=listItem.get(i);
        hd = (ViewHoder) view.getTag();
        hd.name.setText((String)mlistItem.get("name"));//获取activity传入的值并进行设置  即第一种 在adapter中获取activity传递的值并显示
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if (mlistItem.get("time") != null){
            hd.time.setText(sdf.format(mlistItem.get("time")));//由于传过来的 mlistItem.get("time") 是日期格式所以转为string
        }else {
            hd.time.setText("");
        }
        final ViewHoder finalHd = hd;
        hd.start.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle("确定要开始吗?").
                        setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialogInterface, int i) {
                        id=null;
                        dialogInterface.dismiss();
                    }
                });
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialogInterface, int i) {
                        id=(String) mlistItem.get("id");
                        listener.onButtonClick(finalHd.start,id);
                    }
                });
                builder.show();
            }
        });

        hd.checkBox.setChecked((Boolean) mlistItem.get("checkBox"));
        final CheckBox checkBox=view.findViewById(R.id.option);
        checkBox.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (checkBox.isChecked()){
                    map.put(i,true);
                    map2.put(i,String.valueOf(mlistItem.get("id")));
                }else {
                    map.remove(i);
                    map2.remove(i);
                }
            }
        });
        if(map!=null&&map.containsKey(i)){
            checkBox.setChecked(true);
        }else {
            checkBox.setChecked(false);
        }
        return view;
    }


    class ViewHoder{
        TextView time;
        TextView name;
        CheckBox checkBox;
        Button start;
    }

    public interface OnButtonClickListener{
        void onButtonClick(View view, String id);
    }
}

MyActivity文件(部分)

在这里插入图片描述

3.结尾

个人使用安卓不多,有错误欢迎指正,会更正在文中,本次梳理总结是从原有项目中摘抄所需部分出来,MyActivity文件太多只摘取使用部分,可能会有所遗漏,有需要可私信。

标签:自定义,adapter,tab,activity,import,android,public,view
来源: https://blog.csdn.net/qq_42376993/article/details/114852736

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有