我们一般需要自定义adapter   这里就需要继承BaseAdapter

adapter在MVC开发模式中,是控制层

baseAdapter  继承这个方法必须重写 四个方法

1.  getcont 方法     这个是返回总记录数

2. object  getItem 方法  这个方法是返回选项内容

3 .getItemId 方法 这个方法是返回选项内容ID

4.getView 方法 这个方法显示一行行的记录(最重要的方法)

(一) 首先编写xml布局文件

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ListViewandroid:id="@+id/listview"android:layout_height="wrap_content"android:layout_width="match_parent"/></RelativeLayout>

ziyuan.xml

<?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="match_parent"  android:orientation="horizontal" >  <ImageView  android:id="@+id/Image"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:paddingLeft="10dp" />  <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="vertical" >  <TextView   android:id="@+id/Text1"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:textSize="20dp"  android:textColor="#f0f"  android:paddingLeft="10dp"/>  <TextView   android:id="@+id/Text2"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:textSize="14dp"  android:paddingLeft="10dp"/>  <Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="观看"/></LinearLayout>  </LinearLayout>  

(二)开始编写自定义的adapter(实现了内容的性能优化)

myadapter.java

import java.util.List;import android.content.Context;
import android.content.pm.LabeledIntent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;//自定义适配器
public class MyAdapters extends BaseAdapter {private Context mContext;  //定义一个视图private List<String> text;private List<Integer> images;private List<String> text1;private List<String> btn1;private int temp;class ItemViewCache   //内部类  元素的缓冲区{public TextView mTextView;public ImageView mImageView;public TextView mTextView2;public Button btn1;}public MyAdapters(Context mContext, List<String> text, List<Integer> images,List<String> text1,List<String> btn1) {super();this.mContext = mContext;this.text = text;this.images = images;this.btn1=btn1;this.text1=text1;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn text.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}//  arg0  相当于position  这个动态的增长@Overridepublic View getView(final int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stub//优化ListViewif(arg1==null){arg1=LayoutInflater.from(mContext).inflate(R.layout.ziyuan,null);ItemViewCache viewcache=new ItemViewCache();viewcache.mTextView =(TextView)arg1.findViewById(R.id.Text1); viewcache.mImageView=(ImageView)arg1.findViewById(R.id.Image); viewcache.mTextView2=(TextView)arg1.findViewById(R.id.Text2);viewcache.btn1=(Button)arg1.findViewById(R.id.btn1);arg1.setTag(viewcache);}ItemViewCache cache=(ItemViewCache)arg1.getTag();cache.mTextView.setText(text.get(arg0));cache.mImageView.setImageResource(images.get(arg0));cache.btn1.setText(btn1.get(arg0));cache.mTextView2.setText(text1.get(arg0));cache.btn1.setOnClickListener(new OnClickListener() {/* (non-Javadoc)* @see android.view.View.OnClickListener#onClick(android.view.View)*/@Overridepublic void onClick(View view) {// TODO Auto-generated method stub//  arg0  相当于position  这个动态的增长   当前操作的第几行Toast.makeText(mContext,"你选择的是"+text.get(arg0),Toast.LENGTH_SHORT).show();}});return arg1;}}
注意:在自定义中适配器,设置对按钮的监听   arg0  相当于position  这个动态的增长表示当前操作的第几行

(三)编写主类MainActvivity.java

import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity {List<String> text1=new ArrayList<String>();  ListView listview=null;List<String> text2=new ArrayList<String>();List<String> btn1=new ArrayList<String>();List<Integer> list2=new ArrayList<Integer>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listview=(ListView)findViewById(R.id.listview);text1.add(0,"画江湖");text1.add(1,"画江湖之不良人");text1.add(2,"画江湖之灵主");text1.add(3,"画江湖之换世门生");text2.add(0,"主角:小五");text2.add(1,"主角:李星云");text2.add(2,"主角:百里登风");text2.add(3,"主角:念阳枭");btn1.add(0,"观看");btn1.add(1,"观看");btn1.add(2,"观看");btn1.add(3,"观看");list2.add(0,R.drawable.a);list2.add(1,R.drawable.b);list2.add(2,R.drawable.c);list2.add(3,R.drawable.d);MyAdapters adapter=new MyAdapters(this,text1,list2,text2,btn1);listview.setAdapter(adapter);/*listview.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {Toast.makeText(MainActivity.this,"你选择了",Toast.LENGTH_SHORT).show();       }});*/}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}//public void click1(View view)   ////{// Toast.makeText(MainActivity.this,"你选择的是"+,Toast.LENGTH_SHORT).show();//}}

注意:在主类中添加对按钮的事件监听,无法实现对标题的动态获取

最后给大家看实现效果

android自定义adapter(实现对按钮的监听)相关推荐

  1. JS自定义Video的播放按钮并监听该事件

    自定义video标签播放封面按钮 <video width="628" height="375" id="video" poster= ...

  2. Android自定义Adapter的ListView的思路及代码

    Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 width="650" height="200" align=&quo ...

  3. Android自定义View-滑动解锁按钮

    Android自定义View-滑动解锁按钮 写在前面 一.实现的思路 二.先上成品图 三.自定义属性 四.使用 五.具体实现 写在前面 最近由于项目需求,需要有一个类似苹果的滑动解锁控件,抱着万事不求 ...

  4. android设置自定义按钮,Android自定义View之元素按钮

    Android自定义View之元素按钮 之前在dribbble看到的三个元素的按钮,参考了设计的创意,添加了自己定义的动画效果来实现.先看效果 效果图 分别是水火电三个元素的按钮实现.其中电的实现最简 ...

  5. 使用AlertDialog自定义布局,解决自定义控件的监听事件无效的办法

    使用AlertDialog自定义布局,解决自定义控件的监听事件无效的办法 在很多情况下,Android自带对话框的样式满足不了我们项目的需求,这时候我们可以采用为对话框设置自定义布局.如果直接用Dia ...

  6. android 通过GPS获取用户地理位置并监听位置变化

    1 Location Manager 管理服务 2 Location Provider 提供数据的content provider 方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<us ...

  7. 百度地图自定义覆盖物,在手机上无法监听click事件

    百度地图自定义覆盖物,在手机上无法监听click事件 最近在做手机web端集成百度地图遇到了个坑儿:手机端不支持自定义覆盖物的click事件: 1.自带的marker是支持的(marker不属于自定义 ...

  8. JComboBox 的下拉按钮添加监听

    JComboBox 的下拉按钮添加监听 1.问题描述 2.需求分析 3.代码示例 4.结果演示 系统:Win10 JDK:1.8.0_333 IDEA:2020.3.4 1.问题描述 在使用一个 JC ...

  9. Flutter 返回按钮的监听

    物理按钮和返回按钮的监听 Flutter 返回按钮的监听是通过 WillPopScope来实现的 class BackDemoState extends State<BackDemoWidget ...

最新文章

  1. python3 异步 asyncio 动态添加任务
  2. Latex博士论文格式版本(在CASthesis基础上作修改)
  3. linux系统安装nc,Lifelong learner.
  4. 关于两个php.ini的说明
  5. Div+CSS布局入门教程(二) 写入整体层结构与CSS
  6. 数据3分钟丨墨天轮2021年度数据库奖项及中国数据库魔力象限等多项成果发布...
  7. DOM-基本概念及使用
  8. win10浏览器闪退_为什么win10浏览器总是闪退_win10浏览器闪退是怎么回事
  9. 储存卡数据怎么恢复?恢复靠它
  10. 国务院办公厅关于2017年 部分节假日安排的通知 (zz)
  11. 家用洗地机怎么选?2023高性价比家用洗地机推荐
  12. 回顾 12 个面向 Web 开发人员的在线代码编辑器
  13. CPU也能加速AlphaFold2!英特尔最新发布:23倍通量优化指南!
  14. 石墨笔记,幕布和Effie哪个更适合记者?
  15. C++中的堆内存、栈内存和静态内存
  16. 什么是CCNA?(及相关概念)
  17. window 下DOS命令
  18. matlab 共振解调,Matlab.m 共振解调法诊断轴承损伤类故障的原理概述如下:当轴承某一元件表 联合开发网 - pudn.com...
  19. 对话中科易安市场经理:联网智能门锁之运行、运营与运维
  20. Scilab 被抛弃的一些函数

热门文章

  1. oracle的存量,请教一个物料库存量查询的问题, 请进。
  2. 相互保如何升级为相互宝?
  3. 判断属性education和race是否相关。
  4. python 动态变量 excel 配置_python 实现众多excel表格中关键数据追加项目配置库台账.xlsx...
  5. 关于颈椎病,上班族必须知道的TOP5
  6. Opencv之Vec3b是什么东东
  7. stm32毕业设计 智能指纹识别门禁系统 - 物联网 单片机
  8. 第五届金梧奖移动广告创意节暨移动营销峰会2019(上海)
  9. Python 将日志输出到控制台,写入文件,根据不同日志级别打印不同颜色的日志
  10. 草图大师SU导入Unity和虚幻UE4对比