Android ListView的使用

一丶簡單用法

  • 布局文件中增加 ListView
  • 源碼中準(zhǔn)備數(shù)據(jù)
  • 源碼中構(gòu)造適配器 Adapter
  • 通過 id 找到 ListView 的實例
  • ListView 設(shè)置適配器
  • tip:使用android框架提供的子項布局

首先新建項目 :

例如 : ListViewActivity潭千,修改布局文件Listview缀蹄,線性布局嵌套一個 ListView:

<LinearLayout ...>

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

</LinearLayout>

準(zhǔn)備數(shù)據(jù)嗓化,在MainActivity類內(nèi)部聲明變量data鸵赖,并初始化:

private String[] data = {

                      "Apple",
                      "Banana","Orange","Watermelon",
                      "Pear","Grape","Pineapple",
                      "Strawberry","Cherry","Mango"};

#########在MianActivity類的onCreate函數(shù)內(nèi)部構(gòu)造適配器线得,其三個參數(shù)分別是上下文Context,ListView子項目布局的ID路幸,這里使用Android提供的布局糙及,最后一個參數(shù)就是前面準(zhǔn)備的數(shù)據(jù):

ArrayAdapter<String> adapter = new ArrayAdapter<String>(

    MainActivity.this,   // Context上下文                 
    android.R.layout.simple_list_item_1,  // 子項布局id
    data);                                // 數(shù)據(jù)
接著在MainActivity類的onCreate函數(shù)內(nèi)部找到 ListView 這個實例并為這個實例設(shè)置適配器:

listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);

到此步 一個簡單的 ListView 已經(jīng)寫好了

二丶 定制 ListView 的界面

準(zhǔn)備一組圖片,拖入res/drawable目錄
多出的事情:

  • 布局文件中增加 ListView
  • 源碼中準(zhǔn)備數(shù)據(jù) 厌小,準(zhǔn)備圖片資源
  • 源碼中構(gòu)造適配器 Adapter 恢共,準(zhǔn)備子項布局
  • 通過id找到ListView的實例 ,準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)
  • ListView設(shè)置適配器璧亚,派生ArrayAdapter

新建一個布局文件fruit_item.xml讨韭,作為ListView子項目的布局,一個ImageView用于顯示水果的圖片癣蟋,一個TexitView用于現(xiàn)實水果的名稱:

<LinearLayout ...>

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

< TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginLeft="10dip"
    android:id="@+id/fruit_name"/>

</LinearLayout>
定義一個實體類透硝,作為ListView適配器的適配類型。新建類Fruit:

public class Fruit {

// 水果的名稱
private String name;

// 水果對應(yīng)圖片的資源id疯搅,在drawble里邊
private int imageId;

// 構(gòu)造函數(shù)
public Fruit(String name, int imageId){
    this.name = name;
    this.imageId = imageId;
}

// get名字
public String getName() {
    return name;
}

// get圖片id
public int getImageId() {
    return imageId;
}

}

自定義一個適配器濒生,新建類FruitAdapter,從ArrayAdapter派生幔欧,并將泛型指定為Fruit類罪治。
在其中重寫父類的構(gòu)造函數(shù),用于將上下文礁蔗、ListView子項布局的id和數(shù)據(jù)都傳遞進來觉义。
在其中重寫getView函數(shù),
首先通過getItem()方法得到當(dāng)前項的Fruit實例浴井,
然后使用LayoutInflater來為這個子項加載我們傳入的布局晒骇,
接著調(diào)用View的findViewById()方法分別獲取到ImageView和TextView的實例,并分別調(diào)用它們的setImageResource()和setText()方法來設(shè)置顯示的圖片和文字,最后布局返回厉碟。

public class FruitAdapter extends ArrayAdapter<Fruit> {

// 子項布局的id
private int resourceId;

// 構(gòu)造函數(shù)
public FruitAdapter(Context context,         // context上下文
                    int textViewResourceId,  // 子項布局的id
                    List<Fruit> objects){    // 數(shù)據(jù)鏈表
    super(context, textViewResourceId, objects);
    resourceId = textViewResourceId;
}

// 重寫getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // 獲取當(dāng)前項的Fruit實例
    Fruit fruit = getItem(position);
    View view;
    ViewHolder viewHolder;

    if (convertView == null){
        // inflate出子項布局喊巍,實例化其中的圖片控件和文本控件
        view = LayoutInflater.from(getContext()).inflate(resourceId, null);

        viewHolder = new ViewHolder();
        // 通過id得到圖片控件實例
        viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        // 通過id得到文本空間實例
        viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name);
        // 緩存圖片控件和文本控件的實例
        view.setTag(viewHolder);
    }else{
        view = convertView;
        // 取出緩存
        viewHolder = (ViewHolder) view.getTag();
    }

    // 直接使用緩存中的圖片控件和文本控件的實例
    // 圖片控件設(shè)置圖片資源
    viewHolder.fruitImage.setImageResource(fruit.getImageId());
    // 文本控件設(shè)置文本內(nèi)容
    viewHolder.fruitName.setText(fruit.getName());

    return view;
}

// 內(nèi)部類
class ViewHolder{
    ImageView fruitImage;
    TextView fruitName;
}

}
修改MainActivity代碼
聲明一個成員變量:

private List<Fruit> fruitList = new ArrayList<Fruit>();
添加一個initFruit()方法:

private void initFruits(){
//蘋果
Fruit apple = new Fruit("Apple", // 名字
R.drawable.apple_pic); // 圖片id
fruitList.add(apple); // 蘋果增加到鏈表

Fruit banana = new Fruit("Banana", R.drawable.banana_pic);
fruitList.add(banana);

Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
fruitList.add(orange);

Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
fruitList.add(watermelon);

Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
fruitList.add(pear);

Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
fruitList.add(grape);

Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
fruitList.add(pineapple);

Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
fruitList.add(strawberry);

Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
fruitList.add(cherry);

Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
fruitList.add(mango);

}
接著在onCreate函數(shù)調(diào)用初始化函數(shù),修改適配器的初始化:

initFruits();
FruitAdapter adapter = new FruitAdapter(MainActivity.this,
R.layout.fruit_item, fruitList);
listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箍鼓,一起剝皮案震驚了整個濱河市崭参,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌款咖,老刑警劉巖何暮,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铐殃,居然都是意外死亡海洼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門富腊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坏逢,“玉大人,你說我怎么就攤上這事赘被∈钦” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵民假,是天一觀的道長浮入。 經(jīng)常有香客問我,道長羊异,這世上最難降的妖魔是什么事秀? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮野舶,結(jié)果婚禮上易迹,老公的妹妹穿的比我還像新娘。我一直安慰自己筒愚,他們只是感情好赴蝇,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪统锤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天考余,我揣著相機與錄音,去河邊找鬼轧苫。 笑死楚堤,一個胖子當(dāng)著我的面吹牛疫蔓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播身冬,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衅胀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酥筝?” 一聲冷哼從身側(cè)響起滚躯,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘿歌,沒想到半個月后掸掏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宙帝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年丧凤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步脓。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡愿待,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靴患,到底是詐尸還是另有隱情呼盆,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布蚁廓,位于F島的核電站,受9級特大地震影響厨幻,放射性物質(zhì)發(fā)生泄漏相嵌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一况脆、第九天 我趴在偏房一處隱蔽的房頂上張望饭宾。 院中可真熱鬧,春花似錦格了、人聲如沸看铆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弹惦。三九已至,卻和暖如春悄但,著一層夾襖步出監(jiān)牢的瞬間棠隐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工檐嚣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留助泽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像嗡贺,于是被迫代替她去往敵國和親隐解。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容