我们日常开发中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. Scrum项目8.0

    目标:我们开始做每个需要细致的界面,比方说登陆,注册,游戏界面,难度选择 内容:登陆界面:登陆名,登陆密码,登陆按钮,以及优美的底图. 注册页面:名称,密码,登陆按钮,以及优美的底图. 游戏界面:难度 ...

  2. js中for in的用法

    for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代. 例如: var a = ["a","b","c&quo ...

  3. centos7 最小化安装没有ifconfig及修改网卡名enoxxx为ethX

    问题: 1.最小化安装centos7后发现无ifconfig命令 想通过ifconfig查看ip地址发现ifconfig命令不存在,可通过命令 #ip addr       //查看ip 或者 解决: ...

  4. 从头到尾彻底理解KMP

    从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进. 1. 引言 本KMP原文最初写于2年多前的201 ...

  5. 获取文件hash值

    public string getFilesMD5Hash(string file)        {            //MD5 hash provider for computing the ...

  6. context上下文 php版解释

    context翻译为上下文其实不是很好,只是翻译理解大概的作用,对于开发来说,context是对定义的使用的变量,常量或者说是配置, 部分的函数功能除了缺省值之外,往往需要手动设置一些定义量来配合当前 ...

  7. ansible-copy

    ansible是执行yaml文件控制远端服务器.执行命令为 ansible-playbook my.yamlplaybook是ansible中的脚本,采用yaml语言.VM1安装ansible,ip地 ...

  8. socket - socketserver - start TCP server

    前面提到如何使用socket模块启动tcpserver: 创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定ip: ...

  9. hadoop2.7下载mirror

    http://mirror.bit.edu.cn/apache/hadoop/common/

  10. 带你玩转JavaWeb开发之三 -JS插件实战开发

    前提:需要掌握的知识点           填写HTML代码 Element元素中有一个innerHTML属性,这个属性可以填写一段html代码 innerHTML = "<font ...