我们日常开发中BaseAdapter使用非常的多,大家有没有想过,再进一步封装,将平常使用的对象集合,利用泛型放入集合中,再也不用每次都重写那几个方法了,当然我也提供我的下载地址(https://github.com/androidsihai1/BaseAdapterDemo)

 package com.example.administrator.mybaseadapter;

 import android.content.Context;
import android.widget.TextView; public class MyAdapter extends BaseAdapter { public MyAdapter(Context context) {
super(context);
} @Override
public int getItemViewType(int position) {
return 0;
} @Override
public int getItemLayoutId(int getItemViewType) {
return R.layout.item_layout;
} @Override
public void handleItem(int itemViewType, int position, Object item, ViewHolder holder, boolean isRecycle) {
TextView leftTv = holder.get(R.id.left_tv, TextView.class);
TextView righTv = holder.get(R.id.right_tv, TextView.class);
Book book = (Book) item;
leftTv.setText(book.id + "");
righTv.setText(book.name);
} }
package com.example.administrator.mybaseadapter;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ListView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { List<Book> mList = new ArrayList<Book>();
ListView mLv ;
BaseAdapter<Book> mAdapter;
int k = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLv = findView(R.id.lv);
for(int i = 0 ; i < 50 ; i++) {
Book book = new Book();
k++;
book.id = k;
book.name = "name " + k;
mList.add(book);
}
mAdapter = new MyAdapter(this);
mAdapter.setData(mList);
mLv.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
} public <T extends View> T findView(int viewId) {
return (T)findViewById(viewId);
} }
 package com.example.administrator.mybaseadapter;

 public class Book {
public int id;
public String name;
}
 package com.example.administrator.mybaseadapter;

 import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import java.util.ArrayList;
import java.util.List; /**
* Created by pengsihai@yy.com on 2016/11/15.
*/ public abstract class BaseAdapter<T> extends android.widget.BaseAdapter { protected Context mContext;
protected List<T> mData = new ArrayList<T>();
LayoutInflater mInflater; public BaseAdapter(Context context) {
this.mContext = context;
mInflater = LayoutInflater.from(context);
} final public void setData(List<T> list) {
this.mData = list;
} final public List<T> getData() {
return mData;
} @Override
final public int getCount() {
return mData.size();
} @Override
public T getItem(int i) {
return mData.get(i);
} @Override
final public long getItemId(int i) {
return i;
} public abstract int getItemViewType(int position);
public abstract int getItemLayoutId(int getItemViewType);
public abstract void handleItem(int itemViewType , int position , T item , ViewHolder holder , boolean isRecycle);
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
int itemLayoutType = getItemViewType(position);
ViewHolder viewHolder = null;
boolean isRecycle =false;
if(view == null) {
view = mInflater.inflate(getItemLayoutId(itemLayoutType) , null);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
isRecycle = true;
}
handleItem(itemLayoutType , position ,mData.get(position) , viewHolder , isRecycle);
return view;
} public static class ViewHolder{
View mRootView;
SparseArray<View> mViews = new SparseArray<View>();
public ViewHolder(View view) {
this.mRootView = view;
} public View getView() {
return mRootView;
} public <T extends View> T get(int viewId) {
View childView = mViews.get(viewId);
if(childView == null) {
childView = mRootView.findViewById(viewId);
mViews.put(viewId , childView);
}
return (T)childView;
} public <T extends View> T get(int viewId , Class<T> viewClass) {
View childView = mViews.get(viewId);
if(childView == null) {
childView = mRootView.findViewById(viewId);
mViews.put(viewId , childView);
}
return (T) childView;
} }
}
 <?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.mybaseadapter.MainActivity"> <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/left_tv"
android:layout_weight="1" /> <TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/right_tv"
android:layout_weight="1" />
</LinearLayout>

BaseAdapter日常的封装的更多相关文章

  1. RecyclerView.Adapter封装,最简单实用的BaseRecyclerViewAdapter;只需重写一个方法,设置数据链式调用;

    之前对ListView的BaseAdapter进行过封装,只需重写一个getView方法: 现在慢慢的RecyclerView成为主流,下面是RecyclerView.Adapter的封装: Base ...

  2. 孟老板 ListAdapter封装, 告别Adapter代码 (三)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  3. 孟老板 ListAdapter封装, 告别Adapter代码 (四)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  4. JQuery原理介绍及学习方法

    前言 对于JQuery,想必大家都很熟悉.目前,很多web项目,在实施的过程中,考虑到各浏览器原生JS API的兼容性,大都会选用JQuery或类似于JQuery这样的框架来进行网页效果开发.JQue ...

  5. Kubernetes 学习14 kubernetes statefulset

    一.概述 1.在应用程序中我们有两类,一种是有状态一种是无状态.此前一直演示的是deployment管理的应用,比如nginx或者我们自己定义的myapp它们都属于无状态应用. 2.而对于有状态应用, ...

  6. Android开发技巧——BaseAdapter的另一种优雅封装

    RecyclerView虽然因其灵活性.高效性等特点而备受好评,但也不是一定得用它把ListView给替代掉.在某些场景中,ListView还是相对更适合的.比如数据量不大,不频繁更新,并且需要简单地 ...

  7. 孟老板 BaseAdapter封装(五) ListAdapter

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  8. 孟老板 BaseAdapter封装 (一) 简单封装

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  9. 孟老板 BaseAdapter封装 (二) Healer,footer

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

随机推荐

  1. jquery cookie的用法

    http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526663.html jQuery cookie是个很好的cookie插件,大概的使 ...

  2. HTML5新增的标签

    结构性元素<header><footer>定义页眉(与<head>不一样)和页脚 <section>定义section<article> 定 ...

  3. ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  4. CentOS7和win7双系统启动项

    1.添加win7启动项编辑文件 /boot/grub2/grub2.conf menuentry 'Windows 7' { insmod ntfs set root='hd0,1' chainloa ...

  5. springboot与shiro配置

    详情参考:  http://blog.csdn.net/catoop/article/details/50520958 http://blog.csdn.net/qiuqiupeng/article/ ...

  6. listview改变单个单元格的背景色

    ListViewItem lvi = listView1.Items[1]; lvi.UseItemStyleForSubItems = false; System.Windows.Forms.Lis ...

  7. bzoj3083 遥远的国度 && bzoj3626 LCA (树链剖分)

    今早刷了两道树剖的题目,用时两小时十五分钟= = 树剖的题目代码量普遍120+ 其实打熟练之后是很容易调的,不熟练的话代码量大可能会因为某些小细节调很久 3083:裸树剖+"换根" ...

  8. windows下hla编译环境配置(转)_1

    原文地址:http://blog.chinaunix.net/uid-20548989-id-1667169.html HLA简介         HLA,英文"High Level Ass ...

  9. FDCT变换 公式法

    // 对亮度信号进行FDCT变换// @param   data    亮度信号的存储数组void CompressEncode::standardFDCT(BYTE data[MATRIXSIZE] ...

  10. 基于ssh框架开发的购物系统的质量属性

    根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...