Android学习(三)——关于ListView的学习

这一章,我们来说说ListView这个组件。ListView是一个非常常用,并且有用的组件。可能说说还没有建立对该组件的印象。比如我们的歌单便可以用这个组件进行实现。

最近,偶尔会逛逛博客园,发现了一个博主说RecyclerView代替了ListView。毕竟刚接触Android,我收藏了相关的博客,有时间进行学习。当然在这一章中,我们还是对ListView这个组件进行说明。虽然组件会更新,但是很多基本的方法还会延续下去。

——————————————————华丽丽的分割线——————————————————————

要实现一个完整的ListView需要有好几块的内容:1. 子项目的布局,2. 存储数据的类 3. 整体的布局, 4. adapter(适配器)类 5. 需要添加listview的activity。

首先我们需要定义一个子项布局,其中包含一个ImageView和TexView组件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

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

    <TextView
        android:id="@+id/fruit_name"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        ></TextView>
</LinearLayout>

这里可以再编写一个相关的数据类(Fruit),对数据进行存储,其中包括图片的id,以及相关的信息。因为简单,我这边也不编写了。

接着我们开始编写适配器的类了。要实现listview还有其他方法,但是使用adapter比较简单方便,因此使用adapter。其中adapter已经实现的非常好的。因此我们在编写Adapter类是可以继承arrayadapter:

public class FruitAdapter extends ArrayAdapter<Fruit> {
    private int resourceId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) {
        super(context,textViewResourceId,objects);
        resourceId = textViewResourceId;
    }
    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view = LayoutInflater.from(getContext()).inflate(resourceId,null);
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }
}

其中除了构造方法外,我们还需要关注getView这个方法。这个方法与listview添加每一个子项息息相关!在getView中有一个参数是converView,这个参数用于将之前加载好的布局进行缓存,这样能方便以后进行重用。运用这个参数我们可以提高ListView的运行效率:

    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view;
        if(convertView == null ) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        }else {
            view = convertView;
        }
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }

继续进化,使用一个viewHolder的类,对相关的数据进行记录:

    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view;
        ViewHolder viewHolder;
        if(convertView == null ) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder);
        }else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
    }
    class ViewHolder {
        ImageView fruitImage;
        TextView fruitName;

    }

在进行之后,将在主要的,类似的代码如下:

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(adapter);
时间: 2024-10-13 22:19:05

Android学习(三)——关于ListView的学习的相关文章

tcl脚本学习三: “ ”和{} 的学习

lesson 3 example ①: set Z "zhou li "set Z_LABEL "is a boy " puts "\n................. examples of differences between \" and \{"puts "$Z_LABEL $Z"puts {$Z_LABEL $Z}// {}将会把括号里面的东西全部原封不动的输出 example ②: puts "

TweenMax动画库学习(三)

目录: TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)                  尽请期待......

pyqt listview基础学习01

from decimal import * from PyQt4.QtGui import * from PyQt4.Qt import * from PyQt4.QtCore import * import sys class Example(QWidget): def __init__(self,args=None): super(Example, self).__init__(args) list_data=[1,2,3,4] lm=MyListMode(list_data,self) s

C#程序员学习Android开发系列之ListView

上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如何在ListView中按照我们想要的界面效果进行展示.限于篇幅这篇重点讲ListView,下篇博客重点阐述SQLite. ListView是一个常用的数据显示控件,假设我们要做一个简单的界面,如图所示. 这张图是我直接从Android平板电脑(Android 4.2.2)上面截图下来的,就是一个普通

Android下ListView的学习

Android下ListView的学习 文字加图片的ListView 1.添加图片文件 在res下drawable-hdpi文件里添加所需的图片资源: 例:guide1.jpg,guide2.jpg,guide3.jpg,guide4.jpg,guide5.jpg,guide6.jpg,guide7.jpg,guide8.jpg. 2.MainActivity.java文件 1 package com.example.listview; 2 3 import java.util.ArrayLis

38.Android之ListView简单学习(一)

android中ListView用的很普遍,今天来学习下,本篇主要以本地数据加载到listview,后面会学习从网络获取数据添加到listview. 首先改下布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layou

android学习笔记之ListView 和Adapter适配器

1.在学习Listview时候用到了Adapter适配器,定义MyAdapter时候需要继承ListAdapter接口,接口里很多方法没有实现,为了方便google工程师实现了个BaseAdapter类,我们在使用的时候可以继承这个抽象类,因此我们只需要完成几个抽象方法就可以了. public class Db_adapter extends BaseAdapter { private Context context; private List<Person> personlist; publ

Android 学习之路--android基础(三)

Android 学习之路--android基础(三) | Talent?C 盒子 盒子 博客 友链 关于 Posts List 作者Talent?C转载请注明出处 前言 上一篇文章我们介绍了 活动(Activity) 的作用及相关用法,我们知道活动是用来给用户展示 UI界面 的,那么在Android中都有哪些UI控件呢?今天就让我们来简单学习几种常见的 UI控件. 如何编写UI界面? Android Studio中为我们提供两种UI界面的编辑方式, 第一种是通过Android Studio 提供

Android学习-列表视图ListView

一.简介: ListView,列表视图,直接继承了AbsListView,是一个以垂直方式在项目中显示View视图的列表.ListView的数据项,来自一个继承了ListAdapter接口的适配器. 二.新建一个包listview并新建ListViewActivity.java活动: 12345678 public class ListViewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle

Android学习——控件ListView的使用

一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android