日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php listview,ListView Item多布局的实现

發布時間:2025/4/5 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php listview,ListView Item多布局的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ListView Item多布局的實現

本節引言:本節是ListView這個小節的最后一節,給大家帶來的是ListView多布局Item的實現,

何為ListView Item多布局,打個比方,QQ這種聊天列表:

假如他是用一個ListView做的,那么一個ListView上不就有兩種不同的Item咯!

一左一右,嘿嘿,本節就來教大家如何實現ListView的多布局!

1.要點講解:重寫getItemViewType()方法對應View是哪個類別,以及getViewTypeCount()方法iew返回

總共多少個類別!然后再getView那里調用getItemViewType獲得對應類別,再加載對應的View!

2.代碼實現:這里的話直接用上一節的兩個布局,然后另外寫一個Adapter重寫要點中的幾個幾個地方:

MutiLayoutAdapter.java:

/**

*?Created?by?Jay?on?2015/9/23?0023.

*/

public?class?MutiLayoutAdapter?extends?BaseAdapter{

//定義兩個類別標志

private?static?final?int?TYPE_BOOK?=?0;

private?static?final?int?TYPE_APP?=?1;

private?Context?mContext;

private?ArrayList?mData?=?null;

public?MutiLayoutAdapter(Context?mContext,ArrayList?mData)?{

this.mContext?=?mContext;

this.mData?=?mData;

}

@Override

public?int?getCount()?{

return?mData.size();

}

@Override

public?Object?getItem(int?position)?{

return?mData.get(position);

}

@Override

public?long?getItemId(int?position)?{

return?position;

}

//多布局的核心,通過這個判斷類別

@Override

public?int?getItemViewType(int?position)?{

if?(mData.get(position)?instanceof?App)?{

return?TYPE_APP;

}?else?if?(mData.get(position)?instanceof?Book)?{

return?TYPE_BOOK;

}?else?{

return?super.getItemViewType(position);

}

}

//類別數目

@Override

public?int?getViewTypeCount()?{

return?2;

}

@Override

public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{

int?type?=?getItemViewType(position);

ViewHolder1?holder1?=?null;

ViewHolder2?holder2?=?null;

if(convertView?==?null){

switch?(type){

case?TYPE_APP:

holder1?=?new?ViewHolder1();

convertView?=?LayoutInflater.from(mContext).inflate(R.layout.item_one,?parent,?false);

holder1.img_icon?=?(ImageView)?convertView.findViewById(R.id.img_icon);

holder1.txt_aname?=?(TextView)?convertView.findViewById(R.id.txt_aname);

convertView.setTag(R.id.Tag_APP,holder1);

break;

case?TYPE_BOOK:

holder2?=?new?ViewHolder2();

convertView?=?LayoutInflater.from(mContext).inflate(R.layout.item_two,?parent,?false);

holder2.txt_bname?=?(TextView)?convertView.findViewById(R.id.txt_bname);

holder2.txt_bauthor?=?(TextView)?convertView.findViewById(R.id.txt_bauthor);

convertView.setTag(R.id.Tag_Book,holder2);

break;

}

}else{

switch?(type){

case?TYPE_APP:

holder1?=?(ViewHolder1)?convertView.getTag(R.id.Tag_APP);

break;

case?TYPE_BOOK:

holder2?=?(ViewHolder2)?convertView.getTag(R.id.Tag_Book);

break;

}

}

Object?obj?=?mData.get(position);

//設置下控件的值

switch?(type){

case?TYPE_APP:

App?app?=?(App)?obj;

if(app?!=?null){

holder1.img_icon.setImageResource(app.getaIcon());

holder1.txt_aname.setText(app.getaName());

}

break;

case?TYPE_BOOK:

Book?book?=?(Book)?obj;

if(book?!=?null){

holder2.txt_bname.setText(book.getbName());

holder2.txt_bauthor.setText(book.getbAuthor());

}

break;

}

return?convertView;

}

//兩個不同的ViewHolder

private?static?class?ViewHolder1{

ImageView?img_icon;

TextView?txt_aname;

}

private?static?class?ViewHolder2{

TextView?txt_bname;

TextView?txt_bauthor;

}

}這里有個地方要注意的,convertView.setTag(R.id.Tag_APP,holder1);我們平時都直接

setTag(Object)的,這個是setTag的重載方法,參數是一個唯一的key以及后面的一個對象!

唯一!!!我一開始直接把TYPE_BOOK作為第一個參數,然后就報下面這個錯誤:

The key must be an application-specific resource id就是前面這個要唯一,定義一個final類型的int變量和硬編碼一個值的方式都是行不通的

這里的做法是直接在strings.xml中添加:

當然你也可以在res/values/下另外創建一個ids.xml文件,把上面這段代碼貼上去!

除了這個還有一個要注意的地方,就是這個區分類別的標志要從0開始算,不然會報下面

這樣的錯誤

MainActivity.java:

public?class?MainActivity?extends?AppCompatActivity?{

private?static?final?int?TYPE_BOOK?=?0;

private?static?final?int?TYPE_APP?=?1;

private?ListView?list_content;

private?ArrayList?mData?=?null;

private?MutiLayoutAdapter?myAdapter?=?null;

@Override

protected?void?onCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//數據準備:

mData?=?new?ArrayList();

for(int?i?=?0;i?

switch?((int)(Math.random()?*?2)){

case?TYPE_BOOK:

mData.add(new?Book("《第一行代碼》","郭霖"));

break;

case?TYPE_APP:

mData.add(new?App(R.mipmap.iv_icon_baidu,"百度"));

break;

}

}

list_content?=?(ListView)?findViewById(R.id.list_content);

myAdapter?=?new?MutiLayoutAdapter(MainActivity.this,mData);

list_content.setAdapter(myAdapter);

}

}

上面隨機生成0和1,0就往集合中添加一個Book的對象,1的話就添加一個App的對象!

3.代碼下載:

ListViewDemo6.zip

本節小結:好的,本節給大家講解了ListView Item多布局的實現,就是兩個方法的重寫,

然后getView()做下判斷,設置不同的布局而已~代碼非常簡單~

關于ListView的知識就告一段落吧,當然ListView的知識并不止這些,

異步加載,優化等等,這些我們都會在進階部分進行學習~就說這么多,謝謝~

總結

以上是生活随笔為你收集整理的php listview,ListView Item多布局的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。