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



上一篇文章中已经说明了简单的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组件里的第几行位置

完成结果如下:

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在ListView添加图片和产品信息,你可以使用自定义的ListView适配器来完成。 下面是一些基本步骤: 1. 创建一个自定义的布局文件,该布局文件包含一个ImageView和TextView来显示产品信息和图片。 2. 创建一个适配器类,继承自BaseAdapter类,并实现getView()方法。 3. 在getView()方法中,使用LayoutInflater来加载自定义的布局文件,并将产品信息和图片设置到相应的视图中。 4. 在Activity中,实例化ListView对象,并将适配器对象设置ListView对象。 下面是一个简单的示例代码: ```java public class ProductListAdapter extends BaseAdapter { private List<Product> productList; private Context context; public ProductListAdapter(Context context, List<Product> productList) { this.context = context; this.productList = productList; } @Override public int getCount() { return productList.size(); } @Override public Object getItem(int position) { return productList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.list_item_product, parent, false); viewHolder = new ViewHolder(); viewHolder.productImage = (ImageView) convertView.findViewById(R.id.product_image); viewHolder.productName = (TextView) convertView.findViewById(R.id.product_name); viewHolder.productPrice = (TextView) convertView.findViewById(R.id.product_price); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Product product = productList.get(position); viewHolder.productImage.setImageResource(product.getImageResource()); viewHolder.productName.setText(product.getName()); viewHolder.productPrice.setText(product.getPrice()); return convertView; } private static class ViewHolder { ImageView productImage; TextView productName; TextView productPrice; } } ``` 在这个示例中,我们创建了一个自定义的适配器ProductListAdapter,并在getView()方法中加载了一个自定义的布局文件list_item_product.xml。该布局文件包含了一个ImageView和两个TextView,用来显示产品图片和产品信息。 我们还使用了ViewHolder模式来优化ListView的性能。ViewHolder模式可以避免重复findViewById()的开销,从而提高ListView的滚动流畅性。 在Activity中,我们可以像下面这样使用ProductListAdapter: ```java List<Product> productList = new ArrayList<>(); productList.add(new Product(R.drawable.product1, "Product 1", "$10.00")); productList.add(new Product(R.drawable.product2, "Product 2", "$20.00")); productList.add(new Product(R.drawable.product3, "Product 3", "$30.00")); ProductListAdapter adapter = new ProductListAdapter(this, productList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); ``` 在这个示例中,我们创建了一个包含三个产品的列表,并将其设置给ProductListAdapter。然后,我们实例化了一个ListView对象,并将ProductListAdapter对象设置ListView对象。 当我们运行应用程序时,ListView将会显示产品列表,包括产品图片和产品信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值