1. 程式人生 > >Android ListView 基礎入門 簡介以及深入優化

Android ListView 基礎入門 簡介以及深入優化

ListView 簡介

ListView 是安卓裡常用的控制元件, 本文介紹一下常用用法,以及優化等方法

改寫 activity_main.xml

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

    <ListView
        android:id="@+id/listview"
        android:layout_width
="match_parent" android:layout_height="match_parent" />
</LinearLayout>

新建一個 javabean

package com.example.tomchen.testlistview;

/**
 * Created by tomchen on 9/1/15.
 */
public class Icon {
    private int imageId;
    private String name;

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

新建icon_item.xml 用於 listview 每個元素的檢視

<?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="horizontal">
<TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="match_parent" /> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="match_parent" /> </LinearLayout>

新建一個class IconAdapter 繼承自 ArrayAdapter

package com.example.tomchen.testlistview;

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 tomchen on 9/1/15.
 */
public class IconAdapter extends ArrayAdapter<Icon> {
    private int resourceId;


    public IconAdapter(Context context, int resource, List<Icon> icons) {
        super(context, resource, icons);
        this.resourceId = resource;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Icon icon = getItem(position);
        View view;
        if (convertView == null) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        } else {
            view = convertView;
        }
        ImageView image = (ImageView) view.findViewById(R.id.icon);
        image.setImageResource(icon.getImageId());
        TextView text = (TextView) view.findViewById(R.id.text);
        text.setText(icon.getName());
        return view;
    }
}

Note
這兒有了一個優化, convertView 將之前的佈局進行快取, 以便之後進行重用.

所以我們判斷convertView是否為空. 空的話就使用LayoutInflater去載入佈局, 否則的話就直接複用convertView

測試listview

MainActivity裡面加入下面程式碼

package com.example.tomchen.testlistview;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

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

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private List<Icon> icons = new ArrayList<Icon>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listview);
        icons.add(new Icon("Icon_01", R.drawable.ic_01));
        icons.add(new Icon("Icon_02", R.drawable.ic_02));
        icons.add(new Icon("Icon_03", R.drawable.ic_03));
        icons.add(new Icon("Icon_04", R.drawable.ic_04));
        icons.add(new Icon("Icon_05", R.drawable.ic_05));
        icons.add(new Icon("Icon_06", R.drawable.ic_06));
        icons.add(new Icon("Icon_07", R.drawable.ic_07));
        icons.add(new Icon("Icon_08", R.drawable.ic_08));
        icons.add(new Icon("Icon_09", R.drawable.ic_09));
        IconAdapter adapter = new IconAdapter(this, R.layout.icon_item, icons);
        listView.setAdapter(adapter);
    }


}

效果圖如下:

blog.csdn.net/never_cxb

相關推薦

Android ListView 基礎入門 簡介以及深入優化

ListView 簡介 ListView 是安卓裡常用的控制元件, 本文介紹一下常用用法,以及優化等方法 改寫 activity_main.xml <LinearLayo

docker基礎入門安裝以及常見命令

rep ima ftw dock component 工作 echo argument sof 1、docker 常見命令以及安裝知識詳解 1、docker 安裝1、安裝版本統一 :Docker version 18.03.0-ce, build 0520e242、安

Android Firebase接入--Firebase簡介以及Firebase官方Demo的使用

Firebase簡介Firebase是谷歌旗下的一個強大的工具,使用Firebase需要翻牆並且使用者也要能訪問外網才行,Firebase在國外很火爆,但是由於國內無法使用外網所以國內的app沒有使用Firebase。如果做國外的市場Firebase將非常有用。Firebas

Android——AIDL基礎實現demo以及原理探究

最近有一段時間沒寫部落格了,打算最近趁著有時間補補,本文是總結的AIDL的基本使用和原理。 分為兩個部分:一是簡單的上手demo,二是對程式碼邏輯進行分析。 一:簡單的AIDL小Demo: 服務端: 1.新建服務端工程AIDLserver,新建AIDL檔案: 2.開啟該

Android ListView基礎

本系列文章將為大家總結如何快速使用ListView以及做到高效的ListView,本篇博文介紹ListView的基本使用 ListView&Adapter ListView是Android中用

Android monkey 基礎入門介紹

目錄 二、簡介 一、為什麼要用Monkey 測試? 簡單在說就是象猴子一樣亂點,為了測試軟體的穩定性,健壯性。號稱最快速有效的方法。有時候執行相同系列的測試,即使是

python簡介基礎入門 day1

blog 美女 顯示 中文 公開 wid 能開 程序 cnblogs    一、python介紹: Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。 Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年

【原創 Hadoop&Spark 動手實踐 5】Spark 基礎入門,集群搭建以及Spark Shell

min util man 操作 because tro txt library all Spark 基礎入門,集群搭建以及Spark Shell 主要借助Spark基礎的PPT,再加上實際的動手操作來加強概念的理解和實踐。

基礎自學Python 3開發網絡爬蟲(二): 用到的數據結構簡介以及爬蟲Ver1.0 alpha

ket org doc link rtu 出隊 網站 pytho 支持 上一回, 我學會了 用偽代碼寫出爬蟲的主要框架; 用Python的urllib.request庫抓取指定url的頁面; 用Python的urllib.parse庫對普通字符串轉符合url的字符串.

03-Linux基礎入門(三)-系統的基礎優化[對於使用虛擬機學習的學習者]

技術分享 ifcfg-eth 特殊 ... selinux 排查 運行 版本 get 1、關閉SELinux功能①SELinux配置文件路徑 /etc/selinux/config ②查看SELinux狀態 getenforce ③關閉SELinux 方法一:常規方法→修

python全棧開發【第一篇】Python簡介以及入門

request lambda sci linu ogl red 控制 ttl 排行 一、python介紹   python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,Guido開始寫Python語言的編譯器。Python這個名字,來

Android精通教程-第一節Android入門簡介

uri ctrl+c jdk1 安裝jdk .exe 高級 第一步 地址 了解 前言 大家好,給大家帶來Android精通教程-第一節Android入門簡介的概述,希望你們喜歡 每日一句 If life were predictable it would cease to

Java基礎入門五)之方法以及遞歸算法

存在 兼容 直接 elf 推薦 1.8 可讀性 do..while 方法體 一.方法 1.1 什麽是方法 java中的方法類似於其他語言中的函數 是一段用來完成特定功能的代碼片段 1.2 為什麽要聲明方法

Java基礎入門(十一)之基本數據包裝類以及簡單轉換

數據包 intvalue nbsp 1.5 lse false 永遠 ring jdk 一、 基本數據類型包裝類 引用數據類型一般為基本數據類型首字母大寫,除了int 、char,其中int的引用數據類型類Integer,char的引用數據類型為Character 關

python網絡編程基礎--socket的簡介,以及使用socket來搭建一個簡單的udp小程序

流程 發送消息 lose 1.10 軟件 搬運 我們 arm 進程間 socket介紹: socket(簡稱套接字),是進程間通訊的一個工具,他能實現把數據從一方傳輸到另一方,完成不同電腦上進程之間的通訊,它好比數據的搬運工。socket應用:不誇張來說,只要跟網絡相關的應

這些Mysql基礎設計思路以及優化思路我都給你總結好了

%s mit 標記 總結 業務 增加 二叉 索引 基礎 1、定長和不定長要區分開   2、不常用的列和常用的列分開存   3、增加冗余,反範式化   4、btree索引,就是用樹形結構存儲在磁盤上,其中操作是用2分發,找一個中間點,然後把大比這個大的分在一邊,小的放在一邊,

Excel零基礎入門——01Excel的安裝與簡介

Excel零基礎系入門列教程是絕對的零基礎,讓大家從零開始對Excle有個基礎且相對全面的認識,並熟悉基本操作,能夠勝任基本Excel工作,為Excel專業擴充套件做好準備。 如有問題或建議可以直接留言,一定積極回覆和採納建議!   本篇文章是從零開始認識Excel,1-4節是理論知識,第5小

1、【Python】Python 3入門(簡介/基礎語法/運算子/變數/資料型別/位元組)

一、簡介     Python 是一種高層次的結合瞭解釋性、編譯性、互動性和麵向物件的指令碼語言。Python 由 Guido van Rossum 於 1989 年底在荷蘭國家數學和電腦科學研究所發明,第一個公開發行版發行於 1991 年。 特點: 易於學習:Pyth

Flutter入門學習:Flutter簡介以及在macOS上搭建Flutter開發環境

前言 眾所周知,一個移動客戶端一般都會有iOS和Android兩個版本,作為一個移動端的開發人員你肯定有過這樣的想法:能不能有個程式語言直接寫一套程式碼可以直接在iOS和Android系統上執行呢?現在這個問題已經得到解決,Google推出的Flutter,可以快速在iOS和Android上構建高質量的原生

Kotlin入門(19)Android基礎佈局

線性佈局 線性佈局LinearLayout是最常用的佈局,顧名思義,它下面的子檢視像是用一根線串了起來,所以其內部檢視的排列是有順序的,要麼從上到下垂直排列,要麼從左到右水平排列。排列順序只能指定一維方向的檢視次序,可是手機螢幕是個二維的平面,這意味著還剩另一維方向需要指定