android学习之二·简单ListView 添加图片 和多行的Item

本文介绍如何在Android应用中实现带有头像和昵称的自定义ListView。通过创建自定义布局文件person.xml,并结合SimpleAdapter适配器,实现复杂数据项的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



上一篇文章中已经说明了简单的ListView的使用方式,但是在实际运用中,例如QQList上不仅要显示昵称还要显示头像,那么此时,就可以使用自定义ListView来实现了。自定义ListView其实就是自定义一个ListViewItem显示对于这类需求,需要在项目文件的 layout

下建立一个辅助xml布局文件,例如这里建立一个person.xml

将要显示的数据存入Map并形成List集合,使用SinpleAdapterperson.xml文件以及数据源List<Map>??组合起来(代码中已经有注释)这里要显示的图片必须实现放入 res/drawable目录中

步骤:

  1. 创建Model 并在Layout布局文件上创建一个ListView节点设定idlistview

  2. 创建自定义布局文件 person.xml

    1. Layout文件夹右键点击选择新建->Layout resource file在弹出框中输入名称

    2. 内如如下:

      <?xmlversion="1.0" encoding="utf-8"?>

      <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

          android:orientation="horizontal"android:layout_width="match_parent"

         android:layout_height="match_parent"

          >

          <ImageView

              android:layout_width="48dip"

              android:layout_height="48dip"

              android:id="@+id/icon"

             />

          <TextView

              android:layout_width="0dip"

             android:layout_height="wrap_content"

              android:layout_weight="1"

             android:layout_gravity="center_vertical"

              android:id="@+id/text"

              />

      </LinearLayout>

3.Activity中添如下代码:
                  private ListViewlistView;//
声明一个ListView

   privateList<HashMap<String,Object>> data = newArrayList<HashMap<String,Object>>(); //存放显示在listview上的键值对

   private HashMap<String,Object> info =new HashMap<String,Object>();//存放一个实体

   @Override

   protected void onCreate(BundlesavedInstanceState) {

 

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_usernavtools);

 

       listView = (ListView)findViewById(R.id.listview);

       //将头像和姓名放入Map

       info.put("img",R.drawable.icon1);//放入图片

       info.put("name","少司命");

       data.add(info);//放入list

       SimpleAdapter adapter = newSimpleAdapter(usernavtools.this,data,R.layout.person,newString[]{"img","name"},new int[]{R.id.icon,R.id.text});

       //参数解释 (context:上下文,data:数据来源,resource:自定义布局来源,from:数据索引,也就是Map中的键集合,to:要显示的地方比如 icon要显示在自定义布局的personicon

       // name要显示在 persontext)

       //将适配器与listView关联

 

       listView.setAdapter(adapter);

       //ListView设置单击列表的监听器

       listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {

           @Override

           public voidonItemClick(AdapterView<?> parent, View view, int position, long id) {

               HashMap<String,Object>info = data.get(position);//获取list中当前点击的item

               String name = (String)info.get("name");

               Toast.makeText(usernavtools.this,name,Toast.LENGTH_SHORT).show();

           }

       });

   }

这里用到了SimpleAdapter适配器其构造方法:

参数解释 (context:上下文,data:数据来源,resource:自定义布局来源,from:数据索引,也就是Map中的键集合,to:要显示的地方比如 icon要显示在自定义布局的 personicon

 

单击列表的监听器 OnItemClickListener中的onItemClick方法中有4个参数,

第一个参数:相当于ListView的指针,可以通过它来获取这个ListVIew中的所有内容

第二个参数:view是当前单击的列表项中的对象句柄,可以用此获取ListView上这个组件的id并对其操作

第三个参数:是列表项在适配器里的位置,可以理解为从上到下的流水号

第四个参数:是列表在ListView组件里的第几行位置

完成结果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值