如何让一个listview 填充剩余的空白

如何让一个listview 填充剩余的空白,第1张

如果你的布局文件是listview的adapter的载入布局,那你重写adapter类,用adapter里面的getview方法来获取布局文件中想要跟新的控件,然后取出来,跟新。

或者你就布局好。设计好逻辑,更新载入的String。通知adapter.notifyDataSetChanged()就行了

前面总结了如何应用android自带的布局到ListView中去,现在如果想让自己的ListView更生动,只需要将自己定义的布局应用到ListView中,在布局中添加一些生动的元素,比如,图标

一、为ListView每个item添加一个图标

先看效果:

首先定义一个entry.xml布局文件:

[html] view plaincopyprint?

1<span style="font-size:18px">

2<?xml version="1.0" encoding="utf-8"?>

3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

      4android:layout_width="fill_parent"

     5 android:layout_height="60dp"

    6  android:orientation="horizontal" >

    7  <!-- 图标 -->

     8 <ImageView

          9 android:layout_width="48dp"

           10android:layout_height="48dp"

           11android:src="@drawable/preview"

           12android:layout_gravity="center"

           13android:layout_marginLeft="10dp"

        14   />

     15 <!-- 这里引用android自带的布局simple_list_item_1 -->

      16<include

        17   layout="@android:layout/simple_list_item_1"

        18   />

19</LinearLayout>

20

21</span>

然后将此布局文件应用到ListView中去:

1[java] view plaincopyprint?

2<span style="font-size:18px">

3public class ListViewDemo extends ListActivity {

4  

5   private List<Map<String,String>> data = new ArrayList<Map<String,String>>()

  6@Override

 7 public void onCreate(Bundle savedInstanceState) {

     8 super.onCreate(savedInstanceState)

     9 setContentView(R.layout.main)

   10   Map<String, String> map1 = new HashMap<String, String>()

      11map1.put("姓名", "A君")

     12 data.add(map1)

   13   Map<String, String> map2 = new HashMap<String, String>()

    14  map2.put("姓名", "B君")

     15 data.add(map2)

     16 setListAdapter(new SimpleAdapter(this,data,R.layout.entry,

             17 new String[]{"姓名"},

             18 new int[]{android.R.id.text1}

    19  ))

 20 }

21

22</span>

二、动态设置图标

以上例子,处理的非常简单,全部图标都一样,现在要想动态设置每个item中元素,需要继承Adapter子类,通过重写getView()函数,为每个item都设置不同的风格。

下面创建BaseAdapter的子类MyAdapter:

[java] view plaincopyprint?

1<span style="font-size:18px">

2private class MyAdapter extends SimpleAdapter{

     3 //icons存储图标的id

     4 private int[] icons = null

   5  

      6private Context context

7

     8 public MyAdapter(Context context, List<? extends Map<String, ?>> data,

             9 int resource, String[] from, int[] to,int[] icons) {

          10super(context, data, resource, from, to)

        11  // TODO Auto-generated constructor stub

         12 this.icons = icons//传入存储图标id的数组

        13  this.context = context

    14  }

15

     16 /* (non-Javadoc)

       17* 重写getView函数,由于SimpleAdapter能处理TextView,仅仅是不能设置图标

      18 */所以,只需要在调用父类的getView函数的基础上,设置上相应的图标即可

    19  @Override

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

     2 1   // TODO Auto-generated method stub

       22  ViewHolder holder = null

       23   if(convertView == null){

        24    holder = new ViewHolder()

           25convertView = super.getView(position, convertView, parent)//调用父类的getView函数,设置TextView

            26 holder.imageView = (ImageView)convertView.findViewById(R.id.myimageview)

        27      convertView.setTag(holder)

        28  }else {

             29 holder = (ViewHolder)convertView.getTag()

        30  }

          31//从icons中随机选出一个,并设置作为item的图标

          32Random random = new Random()

         33 int index = random.nextInt(icons.length)

        34  holder.imageView.setImageResource(icons[index])

          35

        36  return convertView

    37  }

        38

      39private class ViewHolder{

   40       ImageView imageView

     41 }

 42 }

43

44</span>

MyAdapter继承自SimpleAdapter,重写getView()函数,使listView中每个item的图标都是随机选择的。对MyAdapter的应用如下:

[html] view plaincopyprint?

1<span style="font-size:18px">

2//数组存储图标id

3private int[] myicons = { R.drawable.preview,R.drawable.preview1,R.drawable.preview2,R.drawable.preview3}

4

5</span>

[html] view plaincopyprint?

1<span style="font-size:18px">

2setListAdapter(new </span><span style="font-size:18pxcolor:#FF0000">MyAdapter</span><span style="font-size:18px">(this, data, R.layout.entry, new String[]{"姓名"},

     3         new int[]{android.R.id.text1},</span><span style="font-size:18pxcolor:#FF0000"> myicons</span><span style="font-size:18px">))//为ListView设置MyAdapter适配器

4

5</span>

上图:

在Android开发中,经常会用到ListView显示数据,但是当ListView中没有数据的时候,如果显示一片空白,对用户来说是个不太好的体验,我们可以在ListView中没数据的时候给用户一个提示,如暂无数据之类,在没有用到ListView的setEmptyView方法之前,我的做法是,在ListView的下面放一个用来显示提示信息的布局,当ListView为空时就隐藏ListView,显示提示信息布局,当ListView不为空的时候就显示ListView,隐藏提示信息布局,这种做法虽然能达到效果,但是稍微有点繁琐,其实ListView已经自带了一个setEmptyView方法了,可以为ListView设置一个空布局,当ListView中没数据时会自动显示空布局,下面是对setEmptyView方法的一个测试:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11435337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存