我们日常开发中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. zeppelin-0.6.0安装配置

    从http://zeppelin.apache.org/download.html 下载 zeppelin-0.6.0-bin-all.tgz 解压 修改zeppelin-site.xml,配置端口 ...

  2. LINUX内核参数网络相关

    有助于提高网络性能和吞吐量的参数 net.core.somaxconn = 128 已完成连接队列(completed connection queue) (1)三次握手已经完成,但还未被应用层接收( ...

  3. Ubuntu install Docker

    首先需要说明的是,根据Docker的官方文档,Docker的安装必须在64位的机子上.这里只说明Ubuntu 14.04与16.04,我成功安装成功过Ubuntu 14.04,16.04还没有测试过, ...

  4. 运用ASP.NET实现

    calation.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...

  5. iOS文档注释

    Eclipse和IntelliJ IDEA系的IDE都有自动生成文档注释的功能,Xcode虽然安装了VVDocument,但是仍然感觉注释的功能不是很完善,于是今天整理了一下书写文档注释的一些用法. ...

  6. Codeforces Round #371 (Div. 2) C

    传送门  map或者字典数的应用 简单题 题意: 思路: AC代码: #include<iostream> #include<cstring> #include<cmat ...

  7. 利用React实现表头维度功能

    这是我真正意义上地用react实现一些东西.这次分享的是一个很简单的小组件,效果图先放上来: 前端样式用的是一套框架.功能很简单,就是根据选择的维度,在成员里选择对应这个维度的选项. 首先初始化一些数 ...

  8. 试验添加RAC(ORA10G)节点

    删除一个RAC节点:http://www.cnblogs.com/myrunning/p/4548624.html 1.1安装CLUSTERWARE软件 备注:在做添加删除节点时,10G版本一定要注意 ...

  9. table中某一个tr边框样式设置

    <html> <head> <style type="text/css"> table{ width:500px; } table tr td{ ...

  10. 重新用delphi7写东西

    晚上开始写通讯录的程序,又对表进行点修改.重新开始用delphi7很不习惯,太不好用了. TArecord=record Const UserName=’YHName’; ..... End; 这个在 ...