你的位置:首页 > 操作系统

[操作系统]BaseAdapter日常的封装


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

 1 package com.example.administrator.mybaseadapter; 2  3 import android.content.Context; 4 import android.widget.TextView; 5  6  7  8 public class MyAdapter extends BaseAdapter { 9 10   public MyAdapter(Context context) {11     super(context);12   }13 14 15   @Override16   public int getItemViewType(int position) {17     return 0;18   }19 20   @Override21   public int getItemLayoutId(int getItemViewType) {22     return R.layout.item_layout;23   }24 25   @Override26   public void handleItem(int itemViewType, int position, Object item, ViewHolder holder, boolean isRecycle) {27     TextView leftTv = holder.get(R.id.left_tv, TextView.class);28     TextView righTv = holder.get(R.id.right_tv, TextView.class);29     Book book = (Book) item;30     leftTv.setText(book.id + "");31     righTv.setText(book.name);32   }33 34 35 }

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);  }}

1 package com.example.administrator.mybaseadapter;2 3 4 5 public class Book {6  public int id;7   public String name;8 }

 

 1 package com.example.administrator.mybaseadapter; 2  3 import android.content.Context; 4 import android.util.SparseArray; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8  9 import java.util.ArrayList; 10 import java.util.List; 11  12 /** 13  * Created by pengsihai@yy.com on 2016/11/15. 14 */ 15  16 public abstract class BaseAdapter<T> extends android.widget.BaseAdapter { 17  18   protected Context mContext; 19   protected List<T> mData = new ArrayList<T>(); 20   LayoutInflater mInflater; 21  22   public BaseAdapter(Context context) { 23     this.mContext = context; 24     mInflater = LayoutInflater.from(context); 25   } 26  27   final public void setData(List<T> list) { 28     this.mData = list; 29   } 30  31  final public List<T> getData() { 32     return mData; 33   } 34  35  36   @Override 37   final public int getCount() { 38     return mData.size(); 39   } 40  41   @Override 42   public T getItem(int i) { 43     return mData.get(i); 44   } 45  46   @Override 47   final public long getItemId(int i) { 48     return i; 49   } 50  51   public abstract  int getItemViewType(int position); 52   public abstract int getItemLayoutId(int getItemViewType); 53   public abstract void handleItem(int itemViewType , int position , T item , ViewHolder holder , boolean isRecycle); 54   @Override 55   public View getView(int position, View view, ViewGroup viewGroup) { 56     int itemLayoutType = getItemViewType(position); 57     ViewHolder viewHolder = null; 58     boolean isRecycle =false; 59     if(view == null) { 60       view = mInflater.inflate(getItemLayoutId(itemLayoutType) , null); 61       viewHolder = new ViewHolder(view); 62       view.setTag(viewHolder); 63     } else { 64       viewHolder = (ViewHolder) view.getTag(); 65       isRecycle = true; 66     } 67     handleItem(itemLayoutType , position ,mData.get(position) , viewHolder , isRecycle); 68     return view; 69   } 70  71   public static class ViewHolder{ 72     View mRootView; 73     SparseArray<View> mViews = new SparseArray<View>(); 74     public ViewHolder(View view) { 75       this.mRootView = view; 76     } 77  78     public View getView() { 79       return mRootView; 80     } 81  82     public <T extends View> T get(int viewId) { 83       View childView = mViews.get(viewId); 84       if(childView == null) { 85         childView = mRootView.findViewById(viewId); 86         mViews.put(viewId , childView); 87       } 88       return (T)childView; 89     } 90  91     public <T extends View> T get(int viewId , Class<T> viewClass) { 92       View childView = mViews.get(viewId); 93       if(childView == null) { 94         childView = mRootView.findViewById(viewId); 95         mViews.put(viewId , childView); 96       } 97       return (T) childView; 98     } 99 100   }101 }

 1 <? 2 <RelativeLayout  3    4   android:id="@+id/activity_main" 5   android:layout_width="match_parent" 6   android:layout_height="match_parent" 7   tools:context="com.example.administrator.mybaseadapter.MainActivity"> 8  9     <ListView10       android:id="@+id/lv"11       android:layout_width="match_parent"12       android:layout_height="match_parent" />13 </RelativeLayout>

 1 <? 2 <LinearLayout  3   android:orientation="horizontal" android:layout_width="match_parent" 4   android:layout_height="match_parent"> 5  6   <TextView 7     android:text="TextView" 8     android:layout_width="wrap_content" 9     android:layout_height="wrap_content"10     android:id="@+id/left_tv"11     android:layout_weight="1" />12 13   <TextView14     android:text="TextView"15     android:layout_width="wrap_content"16     android:layout_height="wrap_content"17     android:id="@+id/right_tv"18     android:layout_weight="1" />19 </LinearLayout>