ListView显示和重写BaseAdapter的方法

部分内容借鉴自一下网站:
listview与adapter用法
http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html
Baseadapter的 getItem 跟 getItemId 的作用和重写
http://www.csdn123.com/html/exception/667/667664_667666_667660.htm
getView方法详解
http://blog.csdn.net/yelbosh/article/details/7831812
Adapter内的onItemClick监听器四个arg参数
http://blog.sina.com.cn/s/blog_618199e60101071l.html

ListView的使用是结合适配器adapter,这里我只介绍使用BaseAdapter的情况。

基本步骤:
定义一个类继承BaseAdapter,我这里将名字设为TextImageAdapter .
public class TextImageAdapter extends BaseAdapter{}

(1)
类里面一般需要创建LayoutInflater类型的变量。
Private LayoutInflater mInflater;

(2)
然后重写构造函数:

Public TextImageAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}

(3)
定义getItem(int position),getItemId(int position)函数。前者表示获取特定位置的数据项,后者得到的是position对应的id。

(4)
定义getCount(),系统要开始创建ListView时,先调用getCount()函数,得到ListView的总长度。然后每一行再根据getView()函数进行创建。所以我们需要在该函数里面返回要显示数据的总长度。

(5)这里写图片描述
重写getView(int position, View convertView, ViewGroup viewgroup),第一个参数表示在列表中下一个要消失的item的位置,即如果是向上滑就是最上端的item的位置,下滑就是最下端。第二个表示列表中刚刚消失的item,最后一个保存的是整个要显示的item的集合。接下来我们看看代码:

public View getView(int position, View convertView, ViewGroup viewgroup){
    ViewHolder viewHolder;
    int imageId;
if(convertView == null){
        viewHolder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.activity_speakers_home_item, null);
        viewHolder.text_name = (TextView)convertView.findViewById(R.id.speakers_name);
        viewHolder.icon = (ImageView)convertView.findViewById(R.id.speakers_head);
        viewHolder.text_title = (TextView)convertView.findViewById(R.id.speakers_title);
        convertView.setTag(viewHolder );
    }else{
        viewHolder = (ViewHolder)convertView.getTag();
    }

    String str_name = mspeakerlist.get(position).getPicture();
    imageId= getResources().getIdentifier(str_name, "drawable", getPackageName() );
    if(imageId >0) {
        viewHolder.icon.setImageResource(imageId);
    }else{
        viewHolder.icon.setImageResource(R.drawable.default_speaker);
    }
    viewHolder.text_name.setText(mspeakerlist.get(position).getName());
    viewHolder.text_title.setText(mspeakerlist.get(position).getTitle() );

    return convertView;
}
class ViewHolder{
    public ImageView icon;
    public TextView text_name;
    public TextView text_title;
}

首先需要创建一个缓冲区,该缓冲区是一个新建的类,保存有每个item的控件。然后对convertView进行判断,等于null表示是刚刚载入ListView,所以需要在这里将缓冲区内的控件进行初始化,指明他们对应的是每个item里面的控件,初始化完之后还需要使用setTag()将缓冲区放入到convertView中。如果不等于null,即并不是刚开始载入该ListView,是所以我们需要用getTag()从convertView提取出放到缓冲区中。

之后就是对缓冲区的每个控件进行内容的设定。这里需要注意到是:使用BaseAdapter我们并不一定要将数据保存在ArrayList<Map<Object, Object>>的形式中,你可以自己定义保存数据的类型。

以上的函数是放在onCreate(Bundle savedInstanceState)之外,但以上这些前提都设置好了之后,我们就应该把ListView显示出来,一下操作是放在onCreate(Bundle savedInstanceState)。

1.创建ListView
ListView listView = (ListView) findViewById(android.R.id.list);

3.通过.setAdapter()来设置适配器。
listView.setAdapter(new TextImageAdapter(this));

到这里时ListView的显示就完成了。但如果你想要对每一项的点击做出反应的话,就需要定义监听器了。代码如下:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        startActivity(intent_Item);
    }
});

重点讲解onItemClick函数的参数,第一个相当于适配器的一个指针,告诉你该ListView对应的适配器是谁,可以获得适配器中的一切东西。第二个表示你所点击的那个item的view的句柄,可以通过这个view获得对应item里的控件。第三个和第四个大部分情况都一样,表明你点击的那个item是在第几行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值