这篇文章主要为大家详细介绍了机器人列表视图实现图文列表显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了机器人列表视图实现图文列表显示的具体代码,供大家参考,具体内容如下
目标效果:
列表视图如果内容过多,可以滑动屏幕来显示,并且点击某一行可使用吐司方法弹出对应的水果名字。
1.新建项目,新建实体实体类包,包中建存储每行水果信息的水果类。
Fruit.java页面:
包com。举例。实体;
公共类水果{
private int imageId//使用身份证明(识别)锁定水果图片
私有字符串imageName//对应的水果名字
public Fruit(int imageId,String imageName) {
super();
this.imageId=imageId
this.imageName=imageName
}
public int getImageId() {
返回imageId
}
public void set imageId(int imageId){
this.imageId=imageId
}
公共字符串getImageName() {
返回imageName
}
public void set imageName(String imageName){
this.imageName=imageName
}
}
2.在activity_main.xml页面添加列表视图控件,用于显示所有的水果即水果名称。
activity_main.xml页面:
相对布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
xmlns:tools=' http://模式。安卓。' com/tools '
Android:layout _ width=' match _ parent '
Android:layout _ height=' match _ parent '
列表视图
android:id='@ id/lvFruits '
Android:layout _ width=' match _ parent '
Android:layout _ height=' wrap _ content '
Android:layout _ alignParentLeft=' true '
Android:layout _ alignParentTop=' true '
/列表视图
/RelativeLayout
3.一个列表视图中有多行信息,每行信息可以看成一个线性布局子布局,子布局中有两个控件图像视图和文本视图,按照水平排列。
listview_item.xml页面:
?可扩展标记语言版本='1.0 '编码='utf-8 '?
线性布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '
Android:layout _ width=' match _ parent '
Android:layout _ height=' wrap _ content '
安卓:方向='水平'
图像视图
Android:id=' @ id/I image '
Android:layout _ width=' wrap _ content '
Android:layout _ height=' wrap _ content '
Android:src=' @ drawable/IC _ launcher '/
文本视图
android:id='@ id/tvName '
Android:layout _ margin left=' 10dp '
Android:layout _ gravity=' center _ vertical '
Android:layout _ width=' wrap _ content '
Android:layout _ height=' wrap _ content '
android:text='TextView' /
/线性布局
4.新建转接器,适配器;改编者包,包中建FruitAdaopter.java类,添加适配器,连接布局和数据。
FruitAdaopter.java页面:
包com。举例。适配器;
导入Java。util。列表;
导入com。举例。实体。水果;
导入com。举例。列表视图。r;
导入安卓。内容。语境;
导入安卓。查看。layoutinflater
导入安卓。查看。查看;
导入安卓。查看。查看组;
导入安卓。小部件。数组适配器;
导入安卓。小部件。imageview
导入安卓。小部件。textview
公共类水果蔬菜扩展ArrayAdapterFruit { //适配器,泛型表示想要适配的数据类型
私有int resourceId
public FruitAdaoper(Context Context,int textViewResourceId,
李氏水果对象){ //第一个参数是上下文环境,第二个参数是每一项的子布局,第三个参数是数据
super(context,textViewResourceId,objects);
resourceId=textViewResourceId//获取子布局
}
@Override //getView方法在每个子项被滚动到屏幕内的时候都会被调用,每次都将布局重新加载一边
公共视图getView(int position,View convertView,ViewGroup parent) {//第一个参数表示位置,第二个参数表示缓存布局,第三个表示绑定的视角对象
查看视图;
viewmoder viewmoder//实例取景框,当程序第一次运行,保存获取到的控件,提高效率
if(convertView==null){
view holder=new view holder();
view=layoutinflater。from(get context()).膨胀(//convertView为空代表布局没有被加载过,即getView方法没有被调用过,需要创建
resourceId,null);//得到子布局,非固定的,和子布局身份证明(识别)有关
视图支架。I image=(ImageView)视图。findviewbyid(r . id。I形象);//获取控件,只需要调用一遍,调用过后保存在取景器中
视图支架。TV name=(TextView)view。findviewbyid(r . id。电视名);//获取控件
view.setTag(视图持有者);
}否则{
视图=转换视图//转换视图不为空代表布局被加载过,只需要将convertView的值取出即可
视图持有者=(视图持有者)视图。gettag();
}
水果水果=getItem(位置);//实例指定位置的水果
视图支架。我想象。设置图像资源(水果。getimageid());//获得指定位置水果的身份证明(识别)
视图支架。电视名称。settext(水果。get imagename());//获得指定位置水果的名字
返回视图;
}
}
类别检视器{ //当布局加载过后,保存获取到的控件信息。
ImageView ivImage
文本视图电视名称;
}
5.在MainActivity.java页面初始化数据信息,并添加点击每一行的点击事件。
MainActivity.java页面:
包com。举例。列表视图;
导入Java。util。ArrayList
导入Java。util。列表;
导入com。举例。适配器。fruitadaoper
导入com。举例。实体。水果;
导入安卓。OS。捆绑;
导入安卓。app。活动;
导入安卓。查看。菜单;
导入安卓。查看。查看;
导入安卓。小部件。适配器视图;
导入安卓。小部件。适配器视图。onitemclicklistener
导入安卓。小部件。数组适配器;
导入安卓。小部件。列表视图;
导入安卓。小部件。敬酒;
公共类主要活动扩展活动{
私人ListView水果
私有列表水果水果列表=new ArrayListFruit();//创建集合保存水果信息
@覆盖
受保护的void onCreate(Bundle saved instancestate){
超级棒。oncreate(savedInstanceState);
setContentView(r . layout。活动_主);
LV fruits=(ListView)findViewById(r . id。LV水果);//获得子布局
get data();
FruitAdaoper fruitAdapter=new FruitAdaoper(this,
R.layout.listview_item,水果列表);//关联数据和子布局
吕水果。套装适配器(水果适配器);//绑定数据和适配器
吕水果。setonitemclicklistener(new OnItemClickListener(){//点击每一行的点击事件
@覆盖
public void onItemClick(适配器视图?适配器视图,视图视图,内部位置,
长id) {
水果水果=水果列表. get(位置);//获取点击的那一行
吐司。制作文本(主要活动。this,fruit.getImageName(),Toast .长度_长)。show();//使用吐司输出点击那行水果的名字
}
});
}
私有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。菠萝_pic,
R.drawable.strawberry_pic,R.drawable。西瓜_ pic };
String[] names={ '苹果', '香蕉', '樱桃', '葡萄', '芒果', '橘子', '梨', '菠萝', '草莓,
'西瓜' };
for(int I=0;iimageIds.lengthi ){ //将数据添加到集合中
fruitList.add(新水果(imageIds[i],names[I]);//将图片身份证明(识别)和对应的名字存储到一起
}
}
@覆盖
public boolean onCreateOptionsMenu(菜单菜单){
getMenuInflater().inflate(R.menu.main,menu);
返回真实的
}
}
6.运行就可以出现目标效果了。
7.注意FruitAdaopter.java类中的getView方法在每个子项被滚动到屏幕内的时候都会被调用,每次都将布局重新加载一边,所以为了提高效率可以进行判断,如果程序运行过一次就将布局保存在参数convertView中。
8.同样,获取视图中的获取控件身份证明(识别)如果每次运行都要执行,会降低效率,所以也需要定义取景器类存储获取的控件信息,当第一次运行时执行findViewById()后,将所有的控件信息保存到实例的取景器中,后边每次进行调用即可。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。