Android开发之ListView使用详解

说明

  • ListView组件可以实现循环显示自定义组件的功能。
  • 我想要利用ListView实现的功能图下图红色区域所示,循环显示TextView+ImageView。
    这里写图片描述

实现

1、首先在在你需要显示ListView的xml文件里声明一个ListView。
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#dee9f7">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
2、设计你的ListView
  • 我要显示的是文本加图片,所以设计的是TextView+ImageView组合。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"/>

    <ImageView
        android:id="@+id/item_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
3、建一个名为Item的.java文件
  • 主要功能是用来获取或者设置文本内容和图片的地址,这里我们通过图片的地址来获取图片。
public class Item {
    private String txtContent;  //显示的文本内容
    private String picPath;     //要显示的图片的地址

    //构造函数
    public Item(String txtContent, String picPath) {
        this.txtContent = txtContent;
        this.picPath = picPath;
    }

    public void setPicPath(String picPath) {
        this.picPath = picPath;
    }

    public void setTxtContent(String txtContent) {
        this.txtContent = txtContent;
    }

    public String getPicPath() {
        return picPath;
    }

    public String getTxtContent() {
        return txtContent;
    }
}
4、建一个名为ItemAdapter的.java文件
  • ItemAdapter继承ArrayAdapter,即适配器,ArrayAdapter的主要功能是是用于ListView这类型的控件与数据之间的适配,默认的样式只含有一个TeXView,所以我们要自定义一个适配器来满足我们的需求。
  • 在这个文件中,我们将在通过Item获得所要显示的文本文件以及图片,并绑定。
public class ItemAdapter extends ArrayAdapter<Item> {
    private int layoutId;
    public ItemAdapter(Context context, int layoutId, List<Item> list) {
        super(context, layoutId, list);
        this.layoutId = layoutId;
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Item item = getItem(position);
        View view = LayoutInflater.from(getContext()).inflate(layoutId, parent, false);
        ImageView imageView = (ImageView) view.findViewById(R.id.item_img);
        TextView textView = (TextView) view.findViewById(R.id.item_text);
        //根据图片的地址decode出图片并转化成Bitmap格式并绑定。
        imageView.setImageBitmap(BitmapFactory.decodeFile(item.getPicPath()));
        textView.setText(item.getTxtContent());

        return view;
    }
5、在“主函数”中添加操作
public class processActivity extends Activity {

        //创建一个Item格式的List
        private List<Item> list = new ArrayList<Item>();
        private ListView listView;
        private ItemAdapter itemAdapter;

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.process);

        listView=(ListView)findViewById(R.id.listview);
        itemAdapter=new ItemAdapter(this,R.layout.listprocess,list);
        listView.setAdapter(itemAdapter);

        /*
        中间省略若干不重要的与ListView显示无关的操作
        主要是获取要显示的图片的地址的操作。
        获得了50个要显示的图片的在手机端的地址,例如:
        picPath[0]=Environment.getExternalStorageDirectory() + File.separator + "WR_LPAIS" + File.separator + "ShowImage" + "Lena.jpg";
        */
        for(int i=0;i<50;i++){
             String temp;
             temp="第"+(i+1)+"候选人姓名:"+iamgeID[i].name+"  相似距离:"+iamgeID[i].distanse;
             Item item=new Item(temp,picPath[i]); //picPath[i]为第i张图片的地址
             list.add(item);  //添加item
            }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值