我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android ListView万能适配器实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android ListView万能适配器实例代码

ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义。

最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家。

首先有一个自定义的Adapter继承于BaseAdapter,下面是自定义的Adapter,精华在getView()方法中


package com.example.mylistview.util;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CommonAdapter<T> extends BaseAdapter {
 
 private Context mContext;
 
 private List<T> mDatas;
 private LayoutInflater mInflater;
 
 private int mlayoutId;
 public CommonAdapter(Context context, List<T> datas, int layoutId) {
  this.mContext = context;
  this.mDatas = datas;
  this.mlayoutId = layoutId;
  mInflater = LayoutInflater.from(context);
 }
 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return mDatas.size();
 }
 @Override
 public T getItem(int arg0) {
  // TODO Auto-generated method stub
  return mDatas.get(arg0);
 }
 @Override
 public long getItemId(int arg0) {
  // TODO Auto-generated method stub
  return arg0;
 }
 @Override
 public View getView(int arg0, View arg1, ViewGroup arg2) {
  // TODO Auto-generated method stub
  ViewHolder holder = ViewHolder.get(mContext, arg1, arg2, mlayoutId,
    arg0);
  convert(holder, getItem(arg0));
  return holder.getConvertView();
 }
 public abstract void convert(ViewHolder holder, T t);
}

以上的抽象方法convert(ViewHolder holder, T t);就相当于以前通用代码中的

viewHolder.mTextView = (TextView) convertView .findViewById(R.id.id_tv_title);

viewHolder.mTextView.setText(Bean.getName());

找到控件的id再去设施setText等重复的代码方法中的参数ViewHolder holder, T t    holder就相当于以前通用代码中的viewHolder,t就相当于一个自己定义的实体类Bean。

以上代码中getView()方法中有一个ViewHolder是需要自己声明的,以下是代码以及详细注释:


package com.example.mylistview.util;
import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Type;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class ViewHolder {
 
 private SparseArray<View> mViews;
 
 private int mPosition;
 
 private View mConvertView;
 public View getConvertView() {
  return mConvertView;
 }
 public ViewHolder(Context context, ViewGroup parent, int layoutId,
   int position) {
  this.mViews = new SparseArray<View>();
  this.mPosition = position;
  this.mConvertView = LayoutInflater.from(context).inflate(layoutId,
    parent, false);
  this.mConvertView.setTag(this);
 }
 
 public static ViewHolder get(Context context, View convertView,
   ViewGroup parent, int layoutId, int position) {
  if (null == convertView) {
   return new ViewHolder(context, parent, layoutId, position);
  } else {
   ViewHolder holder = (ViewHolder) convertView.getTag();
   holder.mPosition = position;
   return holder;
  }
 }
 
 public <T extends View> T getView(int viewId) {
  View view = mViews.get(viewId);
  if (null == view) {
   view = mConvertView.findViewById(viewId);
   mViews.put(viewId, view);
  }
  return (T) view;
 }
 
 public ViewHolder setText(int viewId, String text) {
  TextView tv = getView(viewId);
  tv.setText(text);
  return this;
 }
  
 public ViewHolder setImageResource(int viewId, int drawableId) 
 { 
  ImageView view = getView(viewId); 
  view.setImageResource(drawableId); 
  return this; 
 } 
 public int getPosition() 
 { 
  return mPosition; 
 } 
}

再写一个Adapter继承于万能适配器CommonAdapter,还是要写一个自己的Adapter,因为一个项目可能会有多个ListView,但是每个的item元素,布局都会有所不同的,这个泪用来区分不同的ListView与自己所对应的item.这个代码量较少完全可以写成内部类在Activity.java中.


package com.example.mylistview.adapter;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import com.example.mylistview.R;
import com.example.mylistview.domain.Bean;
import com.example.mylistview.util.CommonAdapter;
import com.example.mylistview.util.ViewHolder;
public class MyAdapter extends CommonAdapter<Bean> {
 public MyAdapter(Context context, List<Bean> datas, int layoutId) {
  super(context, datas, layoutId);
  // TODO Auto-generated constructor stub
 }
 @Override
 public void convert(ViewHolder holder, final Bean bean) {
  // TODO Auto-generated method stub
  holder.setText(R.id.tv_title, bean.getTitle())
    .setText(R.id.tv_desc, bean.getDesc())
    .setText(R.id.tv_time, bean.getTime())
    .setText(R.id.tv_phone, bean.getPhone());
  
  final CheckBox cBox = (CheckBox)(holder.getView(R.id.cb));
  if (cBox != null)
  {
   cBox.setChecked(bean.isChecked());
   cBox.setOnClickListener(new OnClickListener()
   {
    @Override
    public void onClick(View v)
    {
     bean.setChecked(cBox.isChecked());
    }
   });
  }
 }
}

优化之后用适配器的时候就简单多了下面是实体类,item和MainActivity.java中的代码:

实体类:


package com.example.mylistview.domain;
public class Bean {
 private String title;
 private String desc;
 private String time;
 private String phone;
 private boolean isChecked;
 public boolean isChecked() {
  return isChecked;
 }
 public void setChecked(boolean isChecked) {
  this.isChecked = isChecked;
 }
 
 public Bean(String title, String desc, String time, String phone) {
  this.title = title;
  this.desc = desc;
  this.time = time;
  this.phone = phone;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public String getDesc() {
  return desc;
 }
 public void setDesc(String desc) {
  this.desc = desc;
 }
 public String getTime() {
  return time;
 }
 public void setTime(String time) {
  this.time = time;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
}

MainActivity.java:

重点代码:

参数有上下文,集合,和自己对应的item就可以了
 adapter = new MyAdapter(this, mDatas, R.layout.item);


package com.example.mylistview.ui;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.example.mylistview.R;
import com.example.mylistview.adapter.MyAdapter;
import com.example.mylistview.domain.Bean;
public class MainActivity extends Activity {
 private ListView listView;
 private List<Bean> mDatas;
 
 private MyAdapter adapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
  initData();
  listener();
 }
 private void listener() {
  // TODO Auto-generated method stub
  listView.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     long arg3) {
    // TODO Auto-generated method stub
    startActivity(new Intent(MainActivity.this, SecondActivity.class));
   }
  });
 }
 private void initData() {
  // TODO Auto-generated method stub
  mDatas = new ArrayList<Bean>();
  Bean bean = new Bean("Android新技能 Get",
    "Android-打造万能的ListView和GridView适配器", "2015-08-05", "10086");
  mDatas.add(bean);
  bean = new Bean("捡到权志龙一个",
    "在星巴克捡到权志龙一个", "2015-08-06", "10086");
  mDatas.add(bean);
  bean = new Bean("GetTOP一个",
    "在韩国首尔捡到TOP一个", "2015-08-07", "10086");
  mDatas.add(bean);
  adapter = new MyAdapter(this, mDatas, R.layout.item);
  listView.setAdapter(adapter);
 }
 private void initView() {
  // TODO Auto-generated method stub
  listView = (ListView) findViewById(R.id.listView);
 }
}

item布局:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:padding="10dp" >
 <CheckBox
  android:focusable="false"
  android:id="@+id/cb"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentRight="true"
  android:layout_centerInParent="true" />
 <TextView
  android:id="@+id/tv_title"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginTop="10dp"
  android:singleLine="true"
  android:text="Android新技能 Get" />
 <TextView
  android:id="@+id/tv_desc"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_below="@id/tv_title"
  android:layout_marginTop="10dp"
  android:layout_toLeftOf="@id/cb"
  android:maxLines="2"
  android:text="Android-打造万能的ListView和GridView适配器"
  android:textColor="#898989" />
 <TextView
  android:id="@+id/tv_time"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_below="@id/tv_desc"
  android:layout_marginTop="10dp"
  android:text="2015-08-05"
  android:textColor="#898989"
  android:textSize="12sp" />
 <TextView
  android:id="@+id/tv_phone"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentRight="true"
  android:layout_below="@id/tv_desc"
  android:layout_marginTop="10dp"
  android:background="#20793D"
  android:maxLines="1"
  android:text="10086"
  android:padding="4dp"
  android:textColor="#FFF" />
</RelativeLayout>

效果图:

用这个去适配另一个不同的布局:

新布局的Adapter一样继承自己的万能adapter:CommonAdapter


package com.example.mylistview.adapter;
import java.util.List;
import java.util.Map;
import android.content.Context;
import com.example.mylistview.R;
import com.example.mylistview.util.CommonAdapter;
import com.example.mylistview.util.ViewHolder;
public class SecondAdapter extends CommonAdapter<Map<String, String>> {
 public SecondAdapter(Context context, List<Map<String, String>> datas,
   int layoutId) {
  super(context, datas, layoutId);
  // TODO Auto-generated constructor stub
 }
 @Override
 public void convert(ViewHolder holder, Map<String, String> t) {
  // TODO Auto-generated method stub
  holder.setText(R.id.tv_item2values, t.get("values"));
 }
}

Activity.java代码:


package com.example.mylistview.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import com.example.mylistview.R;
import com.example.mylistview.adapter.MyAdapter;
import com.example.mylistview.adapter.SecondAdapter;
public class SecondActivity extends Activity {
 private ListView listView_second;
 private SecondAdapter secondAdapter;
 private List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_second);
  initView();
  initData();
 }
 private void initData() {
  // TODO Auto-generated method stub
  for (int i = 0; i < 4; i++) {
   Map map = new HashMap<String, String>();
   map.put("values", "条目" + i);
   lists.add(map);
  }
  secondAdapter = new SecondAdapter(this, lists, R.layout.item2);
  listView_second.setAdapter(secondAdapter);
 }
 private void initView() {
  // TODO Auto-generated method stub
  listView_second = (ListView) findViewById(R.id.listView_second);
 }
}

item:


<?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" >
 <TextView
  android:id="@+id/tv_item2values"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:text="ffffff"
  android:layout_margin="16dp"
  android:gravity="center" />
</LinearLayout>

效果图:

以上就是对Android ListView 的资料整理,希望能给大家带来帮助!

您可能感兴趣的文章:Android ListView和Adapter数据适配器的简单介绍详解xamarin Android 实现ListView万能适配器Android ListView适配器(Adapter)优化方法详解Android巧用XListView实现万能下拉刷新控件android使用flutter的ListView实现滚动列表的示例代码Android自定义控件ListView下拉刷新的代码MVPXlistView展示上拉下拉效果Android通过代码控制ListView上下滚动的方法Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题ListView通用泛型适配器


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android ListView万能适配器实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android ListView万能适配器实例代码

ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义。 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家。 首先有一个自定义的Adapter继承于BaseAdapte
2022-06-06

xamarin Android如何实现ListView万能适配器

小编给大家分享一下xamarin Android如何实现ListView万能适配器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!本章主要分为以下三点:打造通用的V
2023-05-30

Android ListView position详解及实例代码

我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。对OnItemClickListener的position和id参数,
2022-06-06

Android Spinner与适配器模式详解及实例代码

最近做项目对Android Spinner 使用,这里简单写个小例子,来测试如何使用。 Spinner是一个下拉列表,往安卓界面中拖拽一个Spinner控件,在属性中设置Android:entries=“@array/spinner_dat
2022-06-06

android listview的多列模版实例代码

android listview多列模版 在listview中,可以做出多列模版的效果,关键还是在listview的模版本,比如如下:
2022-06-06

Android listview与adapter详解及实例代码

一个ListView通常有两个职责。(1)将数据填充到布局。 (2)处理用户的选择点击等操作。第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非常简单。一个ListView的创建需要3个元素
2022-06-06

SpringMVC适配器模式代码示例

此处采用了适配器模式, 由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要在代码中写成如下形式:if(mappedHandler.getHandler() insta
2023-05-30

Android ListView 滚动条的设置详解及实例代码

Android ListView 滚动条的设置详解 1.滚动条的属性android:scrollbarAlwaysDrawHorizontalTrack 设置是否始终显示水平滚动条。这里用ScrollView、ListView测试均没有效果
2022-06-06

Android之ListView分页加载数据功能实现代码

什么是ListView分页加载数据功能呢?在现在的大数据时代,我们不可能把某些数据全部展示到界面,好比我们经常会看的QQ空间一样,当你看动态的时候,系统不可能会把所有好友的动态都展示在上面,你能看到的一般都是最新好友更新的动态,假如你要看非
2022-06-06

Android实现listview滑动时渐隐渐现顶部栏实例代码

我在开发的时候遇到了这样的需求,就是在listview的滑动中,需要对顶部的栏目由透明慢慢的变为不透明的状态,就是以下的效果最先开始的时候想的很简单,无非就是监听listview的滑动距离,然后根据距离算出透明度的比值,就可以了,但是事实上
2022-06-06

Android 操作excel功能实例代码

学习app对excel的读写控制 1.界面设计 2022-06-06

Android 自定义弹性ListView控件实例代码(三种方法)

关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性ListView 第一种方法:import
2022-06-06

android ListView内数据的动态添加与删除实例代码

main.xml 文件: 代码如下: 2022-06-06

Android Listview中显示不同的视图布局详解及实例代码

Android Listview中显示不同的视图布局 1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertView在Item为单一的同种类
2022-06-06

Android自定义控件开发实战之实现ListView下拉刷新实例代码

这篇博客为大家介绍一个android常见的功能——ListView下拉刷新:首先下拉未松手时候手机显示这样的界面:下面的代码是自定的扎样的控件:2022-06-06

Android列表实现(3)_自定义列表适配器思路及实现代码

下面的例子为使用自定义的列表适配器来显示列表。 代码如下: View Code import android.os.Bundle; import android.app.ListActivity; import android.conte
2022-06-06

Android编程中常用适配器及自定义适配器用法实例分析

本文实例讲述了Android编程中常用适配器及自定义适配器用法。分享给大家供大家参考,具体如下: 一、适配器. 顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录