最常用和最难用的控件ListView——2018年4月17日(笔记)

原创 2018年04月17日 20:24:33

ListView控件

    在程序中需要大量数据的时候,可以用上下滑动的方法浏览更多的数据。

    1.建立一个简单的ListView项目

        首先先建立一个项目,在默认的activity_main.xml中加入ListView控件,其中对长度宽度全部设定成match_parent,让其充满整个空间。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
  >
    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </ListView>

</LinearLayout>

    2.使用ArrayAdapter,通过泛型来制定要适配的数据类型,在构造函数中将要适配的函数传入。暂时使用的是字符串类型。今天同时还接触到了创建自定义的适配器,继承ArrayAdapter,并且将泛型指为新创建的类。

    先新创建一个类,其中name代表名称,imageId代表所需要的图片资源的id。

package com.example.listviewtest;

/**
 * Created by hp on 2018/4/17.
 */

public class People {
    private String name;
    private  int imageId;
    public People(String name,int imageId){
        this.name = name;
        this.imageId = imageId;
    }
    public String getName(){
        return name;
    }
    public int getImageId(){
        return imageId;
    }
}

    然后创建一个新的适配器,继承ArrayAdapter,命名为FruitAdapter,代码如下:

    其中的粉色字体是用来提升ListView的运行效率,在getView()的方法中还有一个convertView参数,这个参数是用于将之前加载好的页面布局进行缓存,以便以后使用

    如果是convertView为null就需要去加载布局,如果不是的话,直接使用。

package com.example.listviewtest;

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;

import java.util.List;

/**
 * Created by hp on 2018/4/17.
 */

public class FruitAdapter extends ArrayAdapter<People>{
    //项布局id
    private int resourceId;
    //将上下文,ListView的子项布局的id和数据传递进来
    public FruitAdapter(Context context, int textViewResourceId, List<People> objects) {
        super(context, textViewResourceId, objects);
        resourceId = textViewResourceId;
    }
        @Override
        //重写getView的方法
        public View getView(int posotion,View convertView, ViewGroup parent){
            People people = getItem(posotion);//获取当前的People的实例项
            //View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            View view;
            if(convertView == null){
                view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            }else{
                view = convertView;
            }
            ImageView fruitImage = (ImageView) view.findViewById(R.id.list_view1);
            TextView fruitName = (TextView) view.findViewById(R.id.people_name);
            fruitImage.setImageResource(people.getImageId());
            fruitName.setText(people.getName());
            return view;

    }
}

根据网上的解释(侵权删)

这是一段很典型的适配器代码实例,我们一行一行来看。
//定义适配器名字,并继承ArrayAdapter类,指定泛型为Fruit
public class FruitAdapter extends ArrayAdapter<Fruit> {
//定义资源Id
private int resourceId;
//构造函数,指定了三个参数
public FruitAdapter(Context context, int textViewResourceId,
List<Fruit> objects) {
//表示重写父类方法
super(context, textViewResourceId, objects);
//把传入的资源Id赋值给resourceId
resourceId = textViewResourceId;
}
//重写getView方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获得传入的对象,getItem是ArrayAdapter中的方法,就是返回传入集合中的对象
Fruit fruit = getItem(position);
//根据传入的资源id解析布局文件
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
//获得该布局文件下的ImageView
ImageView fImage = (ImageView) view.findViewById(R.id.fruit_image);
//获得该布局文件下的TextView
TextView fname = (TextView) view.findViewById(R.id.fruit_name);
//设置图片
fImage.setImageResource(fruit.getImageId());
//设置名称
fname.setText(fruit.getName());
//返回该视图
return view;
}
}

3.根据上方的方法就可以调用setImageResource()和setText()方法来获取需要显示的图片和文字

package com.example.listviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private List<People> peopleList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPeoples();
        FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,peopleList);
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }
    private void initPeoples(){
        for(int i = 0;i<20;i++){
            People one = new People("-----------------",R.drawable.timg_3);
            peopleList.add(one);
        }
    }
}

对创建简单的适配器有一点心得,要知道其中的数据代表着什么,对已经重复使用的代码做到熟悉,看见能看懂的地步。

适配器现在在我这里的理解就是连接数据和页面的一个中转站,把数据传入方法,在页面需要的时候调用。


Redis(最常用的NoSQL数据库技术,互联网行业Java工程师必备)

-
  • 1970年01月01日 08:00

最常用和最难用的控件——ListView

ListView 绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它。由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示...
  • u013678930
  • u013678930
  • 2016-03-08 13:54:35
  • 746

2018年4月14日训练笔记

       今天的比赛还是有问题的,首先三个人配合效果太差,队友上来A题没做动就影响了心情,我也不明白为什么A题他做不出来,然后其它题也不顺利,很多题都错了多次才过,导致前期状态不好,我也是手残,G...
  • sdau20163942
  • sdau20163942
  • 2018-04-14 21:44:19
  • 22

2018年最受欢迎的编程语言

WebWeb平台最近取得了两个重大进展——Web Assembly 和 Service Workers,他们打开快速和高效的Web应用程序的门,弥合与本地编译应用程序的差距。Service Worke...
  • yunfupei0434
  • yunfupei0434
  • 2018-01-30 00:36:04
  • 1783

2018年3月16日学习笔记

使用css创建一个小三角形1、定义div width:0px;height:0px;2、定义小三角边框实线 border-style:soild;3、定义小三角边框宽度 border-width:0p...
  • weixin_41762365
  • weixin_41762365
  • 2018-03-16 16:36:39
  • 81

2018 年,哪些编程语言需求最大、最有钱途?

对于那些想在 2018 年选择正确编程语言的开发人员来说,本文是一份权威指南。编者按:旨在帮助初级开发人员找到高质量工作的 MyFirstITJob.com 创始人 Alexander Petkov ...
  • shellching
  • shellching
  • 2018-03-06 18:25:46
  • 774

2018最受欢迎的 7 种编程语言

ElixirElixir 是一个相当年轻的语言,自然几乎所有的项目都是基于最新版本的。40% 的项目使用的是今年发布的Elixir 1.4 及以上版本,该版本于 2016 年 1 月 1日发布。GoG...
  • gaiyan8765
  • gaiyan8765
  • 2018-02-23 01:20:58
  • 694

2018年3月17日学习笔记

1、nth.child(n)选择器使用方法  //选择父级的第n个子元素。2、nth.child(2n)==nth.child(odd)  nth.child(2n+1)==nth.child(eve...
  • weixin_41762365
  • weixin_41762365
  • 2018-03-17 21:57:19
  • 364

支票大写日期

  某某年:都大写,如2007年,写作:贰零零柒 1月到10月:前面加零,比如10月,写作 :零壹拾 11、12月:壹拾壹 ,壹拾贰 1-10日:零壹 ……零壹拾 20、30日:零贰拾,零叁拾 11-...
  • xiaoK
  • xiaoK
  • 2008-10-09 14:45:00
  • 4302

2018年3月25日学习笔记

实现Product和Category多对一的关系1.在Product类中增加Category属性2.在Product.hbm.xml中设置Category多对一的关系&amp;lt;many-to-o...
  • qq_41893158
  • qq_41893158
  • 2018-03-25 14:13:31
  • 123
收藏助手
不良信息举报
您举报文章:最常用和最难用的控件ListView——2018年4月17日(笔记)
举报原因:
原因补充:

(最多只允许输入30个字)