AndroidListview学习——带有多种资源的listview

android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

下面通过一个实例来学习稍复杂一点listview的使用,在listview的每一个项中都有一个图片一个两个文字控件。为此需要:

1.一个activty来显示listview

2.一个Javabean,来为数据承载不同类型的数据

3.一个adapter来连接数据和listview

4.一个布局文件来设置listview的每一项的显示形式

 

第一步,新建一个Android项目。

在主界面的布局文件中加入一个listview控件并设置其属性。

<ListView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@id/my_listv">

       

</ListView>

 

 

在activity文件中声明并初始化listview。

m_listv = (ListView) findViewById(R.id.my_listv);

第二步,新建一个JavaBean文件来承载我们需要显示的数据,其中文字为String类型,图片在Android中的存储方式为Int型的ID。Java文件的构造函数如下:

public MyDate(String name,String address,integer img){

      this.name = name;

      this.address = address;

      this.img = img;

   }

第三步,新建一个Layout文件来显示listview中的每一项的具体内容

这里因为有一个图片两个文字形式的内容,所以需要在布局中加入相应的控件。

第四步新建一个Adapter文件来连接数据和控件。

/*

 *adapter需要继承BaseAdater,继承这一接口需要实现一些函数。

 * 这些函数在listview的点击事件触发的时候会被调用。

 * 具体功能参见Android的开发文档

 *

 * */

还有一些注意的都在注释里。看注释即可

第五部,在Activity里为listView设置适配器。

MyAdapter adapter = new MyAdapter(this);

      m_listv.setAdapter(adapter);

 

主要程序代码

packagecom.example.listviewdemo;

 

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.Menu;

importandroid.view.MenuItem;

importandroid.widget.ListView;

 

public classMainActivity extends Activity {

        

         private ListView m_listv;

 

         @Override

         protected void onCreate(BundlesavedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                  

                   //初始化listview

                   m_listv = (ListView)findViewById(R.id.my_listv);

                  

                   MyAdapter adapter = newMyAdapter(this);

                   //System.out.println("????????????????????????????????????????????????????????");

                   m_listv.setAdapter(adapter);

                   System.out.println("-------------------------------------------");

         }

}

 

 

 

 

package com.example.listviewdemo;

 

import android.R.integer;

 

public classMyDate {

  

   private String name;

   private String address;

   private int img;

  

  

   //自动生成setget函数

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getAddress() {

      return address;

   }

   public void setAddress(String address) {

      this.address = address;

   }

   public int getImg() {

      return img;

   }

   public void setImg(int img) {

      this.img = img;

   }

  

  

   //构造函数

   public MyDate(String name, String address, int img) {

      this.name = name;

      this.address = address;

      this.img = img;

      System.out.println(">>>>>>>>>>>>inthe adpater-----------");

   }

  

 

}

 

 

 

packagecom.example.listviewdemo;

 

importjava.sql.Date;

importandroid.R.integer;

importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

importandroid.widget.LinearLayout;

importandroid.widget.TextView;

/*

 * adapter需要继承BaseAdater,继承这一接口需要实现一些函数。

 * 这些函数在listview的点击事件触发的时候会被调用。

 * 具体功能参见Android的开发文档

 *

 * */

public classMyAdapter extends BaseAdapter{

        

    private Context m_context=null;

   

         //构造函数,用来显示在activity里新建实例

         public MyAdapter(Context context) {

                   // TODO Auto-generatedconstructor stub

                   this.m_context= context;

         }

         public Context getContext() {

                   return m_context;

         }

        

        

         //数据配置,新建一个mydate 类型的数组,并填充数据。数据可以手动添加也可以从数据源库读出,这里手动添加数据

        

         private MyDate[] Date = new MyDate[]

                            {

                            new MyDate("李华","西安市", R.drawable.pic1),

                            new MyDate("张明","西安市", R.drawable.pic2),

                            new MyDate("小白","西安市", R.drawable.pic4),

                            new MyDate("小黑","西安市", R.drawable.pic9),

                            new MyDate("小王","西安市", R.drawable.pic9),

                            new MyDate("小八","西安市", R.drawable.pic4),

                            };

        

        

         @Override

         public int getCount() {

                   // TODO Auto-generated methodstub

                   return Date.length;

         }

 

         @Override

         public Object getItem(int position) {

                   // TODO Auto-generated methodstub

                   return Date[position];

         }

 

         @Override

         public long getItemId(int position) {

                   // TODO Auto-generated methodstub

                   return position;

         }

 

         @Override

         public View getView(int position, ViewconvertView, ViewGroup parent) {

                   // TODO Auto-generated methodstub

                   //为了避免资源的浪费,可以先判定一下convertview是否存在,如果是空的就新建一个,如果不是就重用

                   LinearLayout ll = null;

                   if (convertView!=null) {

                            ll = (LinearLayout)convertView;

                   }else{

                            ll = (LinearLayout)LayoutInflater.from(getContext()).

                                               inflate(R.layout.listitem,null);

                   }

                   //System.out.println(">>>>>>>>>>>>inthe adpater-----------");

          //获取数据

                   MyDate md = (MyDate)getItem(position);

                   //得到数据里面的内容

                   int m_img = md.getImg();

                   String m_name = md.getName();

                   String m_address =md.getAddress();

                   //得到listitem里面的控件

                   ImageView iv = (ImageView)ll.findViewById(R.id.imageView1);

                   TextView name = (TextView)ll.findViewById(R.id.name);

                   TextView address = (TextView)ll.findViewById(R.id.address);

                   //填充数据

                   iv.setImageResource(m_img);

                   name.setText(m_name);

                   address.setText(m_address);

                   System.out.println(">>>>>>>>>>>>inthe adpater-----------");

                  

                   return null;

         }

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值