自定义Adapter

来源:互联网 发布:苹果mac看视频软件推荐 编辑:程序博客网 时间:2024/04/28 00:59

         最近用到了一种Adapter的新写法,分享一下顺便加深自己的印象.

         直接上代码。

        

User:

public class User {private int id;private String name;private String num;public User(int id, String name, String num) {super();this.id = id;this.name = name;this.num = num;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "the user id is "+ getId()+"  the name is "+ getName()+"  the num is "+ getNum();}}


ViewHolderBase:

public abstract class ViewHolderBase<ItemDataType> {protected int mLastPosition;protected int mPosition = -1;public abstract View createView(LayoutInflater layoutInflater);public abstract void showData(int position, ItemDataType itemData);public void setItemData(int position) {mLastPosition = position;mPosition = position;}public boolean stillHoldLastItemData() {return mLastPosition == mPosition;}}


ViewHolderCreator

public interface ViewHolderCreator<ItemDataType> {public ViewHolderBase<ItemDataType> createViewHolder();}


ListViewDataAdapterBase:

public abstract class ListViewDataAdapterBase<ItemDataType> extends BaseAdapter {protected ViewHolderCreator<ItemDataType> mViewHolderCreator;private LayoutInflater mLayoutInflater = null;public ListViewDataAdapterBase(ViewHolderCreator<ItemDataType> mViewHolderCreator,Context context) {this.mViewHolderCreator = mViewHolderCreator;mLayoutInflater = LayoutInflater.from(context);}@Overridepublic abstract ItemDataType getItem(int position);@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ItemDataType itemData = getItem(position);if (convertView == null) {ViewHolderBase<ItemDataType> holderbase = mViewHolderCreator.createViewHolder();if (holderbase != null) {convertView = holderbase.createView(mLayoutInflater);if (convertView != null) {holderbase.setItemData(position);holderbase.showData(position, itemData);convertView.setTag(holderbase);}}} else {@SuppressWarnings("unchecked")ViewHolderBase<ItemDataType> holderBase = (ViewHolderBase<ItemDataType>) convertView.getTag();if (holderBase != null) {holderBase.setItemData(position);holderBase.showData(position, itemData);}}return convertView;}}


ListViewDataAdapter:

public class ListViewDataAdapter<ItemDataType> extendsListViewDataAdapterBase<ItemDataType> {protected ArrayList<ItemDataType> mItemDataList = new ArrayList<ItemDataType>();public ListViewDataAdapter(ViewHolderCreator<ItemDataType> mViewHolderCreator,Context context) {super(mViewHolderCreator, context);// TODO Auto-generated constructor stub}public ArrayList<ItemDataType> getDataList() {return mItemDataList;}@Overridepublic int getCount() {return mItemDataList.size();}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic ItemDataType getItem(int position) {if (mItemDataList.size() < position || position < 0) {return null;}return mItemDataList.get(position);}}


MainActivity:

public class MainActivity extends Activity {private ListView mListView;private ListViewDataAdapter<User> mAdapter = null;private List<User> mList = new ArrayList<User>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);for (int i = 0; i < 100; i++) {mList.add(new User(i, "Klaus", "44872978u"));}mListView = (ListView) findViewById(R.id.myListView);mAdapter = new ListViewDataAdapter<User>(new ViewHolderCreator<User>() {@Overridepublic ViewHolderBase<User> createViewHolder() {return new ViewHolderBase<User>() {View convertView;TextView id;TextView name;TextView num;@SuppressLint("InflateParams")@Overridepublic View createView(LayoutInflater layoutInflater) {Log.d("Klaus", "the view is create createView");convertView = layoutInflater.inflate(R.layout.layoutitem, null);Log.d("Klaus","the convertView is " + convertView.toString());id = (TextView) convertView.findViewById(R.id.id);name = (TextView) convertView.findViewById(R.id.name);num = (TextView) convertView.findViewById(R.id.num);return convertView;}@Overridepublic void showData(final int position, User itemData) {Log.d("Klaus", "the data is show showData");Log.d("Klaus", "the id is " + id.getId());Log.d("Klaus","the itemDatais " + itemData.toString());id.setText(itemData.getId() + "");name.setText(itemData.getName());num.setText(itemData.getNum());convertView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Log.d("Klaus", "the position is " + position);}});}};}}, this);mListView.setAdapter(mAdapter);mAdapter.getDataList().addAll(mList);mAdapter.notifyDataSetChanged();}


 

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.testlistview.MainActivity" >    <ListView        android:id="@+id/myListView"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>


 

layoutItem:

<?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/id"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="20dp"/>    <TextView         android:id="@+id/name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="20dp"/>    <TextView         android:id="@+id/num"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="20dp"/></LinearLayout>


 

0 0
原创粉丝点击