ListView简单实现

假设ListView要加载一个People的对象,那么新建一个ListView的步骤如下

1.首先在主界面新建一个ListView

<ListView

android:id="@+id/lv_people"

android:layout_width="match_parent"

android:laout_height="wrap_content"

android:divider="#0000" />

ListView中用到了一个divider属性,它可以用来指定分割线的颜色,这里#0000把分割线设为透明色

2.然后再在外面定义一个消息的实体类People

public class People{

private String name; //姓名

private int age;  //年龄

public Msg(String name,int age){

this.name = name;

this.age = age;

}

//加载get方法

public String getName(){

return name;

}

public int getAge(){

return age;

}

}

3.然后在layout文件新建一个item.xml,表示ListView子项的布局

<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/tv_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="23sp"
     android:textStyle="bold"
       android:text="jack"/>

<TextView 
    android:paddingLeft="10dp"
    android:id="@+id/tv_age"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:textStyle="bold"
    android:text="23"/>
</LinearLayout>

这表示ListView的一行,左边显示name,右边显示age,text的样式是粗体

4.接下来就要创建ListView的适配器类了,让他继承BaseAdaper

public class MyAdapter extends BaseAdapet{

private int resourceId;

public MyAdapter (Context context,int itemId,List<People> list){

super(context,itemId,list);

resourceId = id;

}

@override

public View getView(int position,view convertView,ViewGroup parent){

People people = getItem(position);

View view;

ViewHolder viewHolder;

if(convertView==null){

view = LayoutInflate.from(getContext()).inflate(resourceId,null);

viewHolder = new ViewHolder();

viewHolder.name = (TextView)view.findViewById(R.id.tv_name);

viewHolder.age = (TextView)view.findViewById(R.id.tv_age);

view.setTag(viewHolder); //将ViewHolder存储在view里面,方便下次取出

}

else{

view = convertView;

viewHolder = (ViewHolder)view.getTag();

}

viewHolder.name.setText(people.getName());

viewHolder.age.setText(people.getAge());

return view;

}

class ViewHolder{

TextView name;

TextView age;

}

}

我们主要通过getView来设置返回的子项view,首先我们通过重写父类的一组构造函数,用于将上下文、ListView子布局的id,数据都传递进来,在getView中,我们通过getItem方法获取当前people的实例,然后通过LayoutInflate为这个子项加载我们的布局,接着调用view的findViewById()方法来获取两个TextView的实例。为了提高ListView的运行效率,不用每次更新数据都重新加载布局,在快速滚动时表现更好的性能,增加了一个判断,如果convertView为空,我们就加载布局,不为空我们就对它进行重用。而且我们添加了一个ViewHolder内部类,当convertView为空时,把控件实例放到ViewHolder中,不为空时又可以重新调用View的getTage()方法,这样所有控件的实例都缓存在ViewHolder里面了,没必要每次都通过findViewById()重新获取实例了。

5.最后肯定在MainActivity里面修改代码,把数据传进适配器,再把适配器赋给ListView,那么我们的工作就完成了

下面是关键代码

private List<People> peopleList = new ArratList<People>();

peivate ListView lv_show;

onCreate(){

lv_show = (ListView)findViewById(R.id.lv_show);

initData();  //初始化人物数据

MyAdapet myAdaper = new MyAdapter(MainActivity,this,R.layout.item,peopleList);

lv_show.setAdapter(myAdapter);

}

initData(){

People FirstPeople = new People("张三",18);

People SecondPeople = new People("李四",20);

People ThridPeople = new People("王五",22);

peopleList.add(FirstPeople);

peopleList.add(SecondPeople);

peopleList.add(ThridPeople);

}

至此,一个ListView就建立起来了


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值