android开发分享Android ListView实现图文列表显示

本文实例为大家分享了android listview实现图文列表显示的具体代码,供大家参考,具体内容如下 目标效果:   listview如果内容过多

android开发分享Android ListView实现图文列表显示实例为大家分享了android listview实现图文列表显示的具体代码,供大家参考,具体内容如下

上述就是android开发分享Android ListView实现图文列表显示的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

目标效果:

  Android ListView实现图文列表显示

Android ListView实现图文列表显示

listview如果内容过多,可以滑动屏幕来显示,并且点击某一行可使用吐司方法弹出对应的水果免费精选名字大全。

1.新建项目,新建entity实体类包,包中建存储每行水果信息的fruit类。

fruit.java页面:

  package com.example.entity;     public class fruit {   private int imageid;     //使用id锁定水果图片   private string imagename;   //对应的水果免费精选名字大全   public fruit(int imageid, string imagename) {   super();   this.imageid = imageid;   this.imagename = imagename;   }   public int getimageid() {   return imageid;   }   public void setimageid(int imageid) {   this.imageid = imageid;   }   public string getimagename() {   return imagename;   }   public void setimagename(string imagename) {   this.imagename = imagename;   }  }    

2.在activity_main.xml页面添加listview控件,用于显示所有的水果即水果名称。

activity_main.xml页面:

  <relativelayout xmlns:android="https://schemas.android.com/apk/res/android"    xmlns:tools="https://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">       <listview      android:id="@+id/lvfruits"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_alignparentleft="true"      android:layout_alignparenttop="true" >    </listview>     </relativelayout>

3.一个listview中有多行信息,每行信息可以看成一个linearlayout子布局,子布局中有两个控件imageview和textview,按照水平排列。

listview_item.xml页面:

  <?xml version="1.0" encoding="utf-8"?>  <linearlayout xmlns:android="https://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal" >       <imageview      android:id="@+id/ivimage"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:src="@drawable/ic_launcher" />       <textview      android:id="@+id/tvname"      android:layout_marginleft="10dp"      android:layout_gravity="center_vertical"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="textview" />     </linearlayout>

4.新建adaptor包,包中建fruitadaopter.java类,添加适配器,连接布局和数据。

fruitadaopter.java页面:

  package com.example.adapter;     import java.util.list;     import com.example.entity.fruit;  import com.example.listview.r;     import android.content.context;  import android.view.layoutinflater;  import android.view.view;  import android.view.viewgroup;  import android.widget.arrayadapter;  import android.widget.imageview;  import android.widget.textview;     public class fruitadaoper extends arrayadapter<fruit> {  // 适配器,泛型表示想要适配的数据类型      private int resourceid;      public fruitadaoper(context context, int textviewresourceid,    list<fruit> objects) {             // 第一个参数是上下文环境,第二个参数是每一项的子布局,第三个参数是数据   super(context, textviewresourceid, objects);   resourceid = textviewresourceid;          //获取子布局   }      @override     //getview方法在每个子项被滚动到屏幕内的时候都会被调用,每次都将布局重新加载一边   public view getview(int position, view convertview, viewgroup parent) {//第一个参数表示位置,第二个参数表示缓存布局,第三个表示绑定的view对象   view view;   viewholder viewholder;         //实例viewholder,当程序第一次运行,保存获取到的控件,提高效率   if(convertview==null){     viewholder=new viewholder();    view = layoutinflater.from(getcontext()).inflate(//convertview为空代表布局没有被加载过,即getview方法没有被调用过,需要创建     resourceid, null);     // 得到子布局,非固定的,和子布局id有关    viewholder.ivimage = (imageview) view.findviewbyid(r.id.ivimage);//获取控件,只需要调用一遍,调用过后保存在viewholder中    viewholder.tvname = (textview) view.findviewbyid(r.id.tvname);  //获取控件    view.settag(viewholder);   }else{    view=convertview;      //convertview不为空代表布局被加载过,只需要将convertview的值取出即可    viewholder=(viewholder) view.gettag();   }      fruit fruit = getitem(position);//实例指定位置的水果      viewholder.ivimage.setimageresource(fruit.getimageid());//获得指定位置水果的id   viewholder.tvname.settext(fruit.getimagename());    //获得指定位置水果的免费精选名字大全   return view;      }  }   class viewholder{   //当布局加载过后,保存获取到的控件信息。   imageview ivimage;   textview tvname;  }  

5.在mainactivity.java页面初始化数据信息,并添加点击每一行的点击事件。

mainactivity.java页面:

  package com.example.listview;     import java.util.arraylist;  import java.util.list;     import com.example.adapter.fruitadaoper;  import com.example.entity.fruit;     import android.os.bundle;  import android.app.activity;  import android.view.menu;  import android.view.view;  import android.widget.adapterview;  import android.widget.adapterview.onitemclicklistener;  import android.widget.arrayadapter;  import android.widget.listview;  import android.widget.toast;     public class mainactivity extends activity {      private listview lvfruits;   private list<fruit> fruitlist = new arraylist<fruit>(); //创建集合保存水果信息      @override   protected void oncreate(bundle savedinstancestate) {   super.oncreate(savedinstancestate);   setcontentview(r.layout.activity_main);   lvfruits = (listview) findviewbyid(r.id.lvfruits);  //获得子布局   getdata();   fruitadaoper fruitadapter = new fruitadaoper(this,    r.layout.listview_item, fruitlist);     //关联数据和子布局   lvfruits.setadapter(fruitadapter);          //绑定数据和适配器      lvfruits.setonitemclicklistener(new onitemclicklistener() { //点击每一行的点击事件       @override    public void onitemclick(adapterview<?> adapterview, view view, int position,     long id) {    fruit fruit=fruitlist.get(position);     //获取点击的那一行    toast.maketext(mainactivity.this,fruit.getimagename(),toast.length_long).show();//使用吐司输出点击那行水果的免费精选名字大全    }   });   }      private void getdata() {   int[] imageids = { r.drawable.apple_pic, r.drawable.banana_pic,    r.drawable.cherry_pic, r.drawable.grape_pic,    r.drawable.mango_pic, r.drawable.orange_pic,    r.drawable.pear_pic, r.drawable.pineapple_pic,    r.drawable.strawberry_pic, r.drawable.watermelon_pic };   string[] names = { "苹果", "香蕉", "樱桃", "葡萄", "芒果", "橘子", "梨", "菠萝", "草莓",    "西瓜" };   for(int i=0;i<imageids.length;i++){         //将数据添加到集合中    fruitlist.add(new fruit(imageids[i],names[i])); //将图片id和对应的name存储到一起   }   }      @override   public boolean oncreateoptionsmenu(menu menu) {   getmenuinflater().inflate(r.menu.main, menu);   return true;   }     }

6.运行就可以出现目标效果了。

7.注意fruitadaopter.java类中的getview方法在每个子项被滚动到屏幕内的时候都会被调用,每次都将布局重新加载一边,所以为了提高效率可以进行判断,如果程序运行过一次就将布局保存在参数convertview中。

8.同样,getview中的获取控件id如果每次运行都要执行,会降低效率,所以也需要定义viewholder类存储获取的控件信息,当第一次运行时执行findviewbyid()后,将所有的控件信息保存到实例的viewholder中,后边每次进行调用即可。

以上就是android开发分享Android ListView实现图文列表显示的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/937726.html

(0)
上一篇 2021年11月12日
下一篇 2021年11月12日

精彩推荐