再谈 android 中 BaseAdapter

不知道大家有没有这种体会,在刚学习一门新技术的时候,你去看它是一种体会,一段时间以后,对这门技术有了一定的了解,你再去看它又是另一种体会。对于BaseAdapter就是这样:

在下面这段代码中,对每条记录的布局文件做了两种判断,用到了get与set方法来判断是哪种布局;

还有一点,对于BaseAdapter,在用到它的时候才传入数据(刚开始的时候,我一直以为是在BaseAdapter中就放入数据o(╯□╰)o)

package com.my; import java.util.ArrayList; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class FirendAdapter extends BaseAdapter { private Context mContext = null; /** * 用于存放每条记录 */ FirendItem mFirendItem = new FirendItem(); ArrayList<FirendItem> firendList = new ArrayList<FirendItem>(); /** * 判断是对话还是好友 */ private Boolean isChattingorFirend = false;//true表示加为好友界面,默认为聊天界面 /** * 获得当前选中位置 */ private int curPosition = -1; public FirendAdapter(Context context) { mContext = context; } @Override public int getCount() { // TODO Auto-generated method stub return firendList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return firendList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder = null; /** * 判断是加为好友还是聊天 */ if (isChattingorFirend)//加为好友界面 { if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate( R.layout.firend_join_item, parent, false); holder.firendPhoto = (ImageView) convertView .findViewById(R.id.firend_join_headphoto); holder.firendName = (TextView) convertView .findViewById(R.id.firend_join_name); holder.firendButton = (Button) convertView .findViewById(R.id.firend_join_button); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } /** * 给每条记录添加数据源 */ holder.firendPhoto.setImageBitmap(firendList.get(position) .getPhoto()); holder.firendName.setText(firendList.get(position).getName()); } else //聊天界面 { if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate( R.layout.firend_chat_item, parent, false); holder.firendPhoto = (ImageView) convertView .findViewById(R.id.firend_chat_headphoto); holder.firendName = (TextView) convertView .findViewById(R.id.firend_chat_name); holder.firendSign = (TextView) convertView .findViewById(R.id.firend_chat_sign); holder.firendTime = (TextView) convertView .findViewById(R.id.firend_chat_time); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } /** * 给每条记录添加数据源 */ holder.firendPhoto.setImageBitmap(firendList.get(position) .getPhoto()); holder.firendName.setText(firendList.get(position).getName()); holder.firendSign.setText(firendList.get(position).getSignText()); holder.firendTime.setText(firendList.get(position).getDate()); } return convertView; } class ViewHolder { // Bitmap firendPhoto; ImageView firendPhoto; TextView firendName; TextView firendSign; TextView firendTime; Button firendButton; } public ArrayList<FirendItem> getFirendList() { return firendList; } public void setFirendList(ArrayList<FirendItem> firendList) { this.firendList = firendList; } public Boolean getIsChattingorFirend() { return isChattingorFirend; } public void setIsChattingorFirend(Boolean isChattingorFirend) { this.isChattingorFirend = isChattingorFirend; } }

在调用BaseAdapter的时候有下面的代码:

import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.provider.Contacts; import android.widget.ListView; public class MainActivity extends Activity { FirendAdapter mFirendAdapter = new FirendAdapter(this); private ListView mListView = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.friend_main); initView(); } private void initView() { // TODO Auto-generated method stub mListView = (ListView) findViewById(R.id.mlistview); mListView.setAdapter(mFirendAdapter); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); ArrayList<FirendItem> mainFirendList = new ArrayList<FirendItem>(); FirendItem mainFirendItem = new FirendItem(); Bitmap defaultBit = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon); mainFirendItem.setPhoto(defaultBit); mainFirendItem.setName("Bob"); mainFirendList.add(mainFirendItem); mainFirendItem.setPhoto(defaultBit); mainFirendItem.setName("Alice"); mainFirendList.add(mainFirendItem); /** * 把数据传递给DiaryAdapter适配器 */ mFirendAdapter.setIsChattingorFirend(true); mFirendAdapter.setFirendList(mainFirendList); mFirendAdapter.notifyDataSetChanged();//通知刷新适配器 } }

可以清楚的看到,我们在这里才用set方法来传入了具体的数据,并且用set方法来告诉BaseAdapter这里使用的是哪种布局。

不知道大家理解了我的意思没有?O(∩_∩)O~欢迎多多交流啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值