Android学习之ListViewWord格式.docx

上传人:b****5 文档编号:18700488 上传时间:2022-12-31 格式:DOCX 页数:10 大小:131.77KB
下载 相关 举报
Android学习之ListViewWord格式.docx_第1页
第1页 / 共10页
Android学习之ListViewWord格式.docx_第2页
第2页 / 共10页
Android学习之ListViewWord格式.docx_第3页
第3页 / 共10页
Android学习之ListViewWord格式.docx_第4页
第4页 / 共10页
Android学习之ListViewWord格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Android学习之ListViewWord格式.docx

《Android学习之ListViewWord格式.docx》由会员分享,可在线阅读,更多相关《Android学习之ListViewWord格式.docx(10页珍藏版)》请在冰豆网上搜索。

Android学习之ListViewWord格式.docx

};

//new一个ArrayAdapter,android.R.layout.simple_list_item_1为ListView显示的布局文件

ArrayAdapteradapter=newArrayAdapter(this,android.R.layout.simple_list_item_1,items);

//位ListView设置Adapter

lvwSimple.setAdapter(adapter);

}

二、自定义ListView

上面的那种方法只能显示简单的文字信息,显然在很多场合下都不够用,比如你想要在一个item中显示图片,显示多行文字,这就需要你自定义ListView的布局了。

效果图如下:

步骤:

1、分析你想要实现的布局效果,自定义布局文件lvw_custom.xml,该布局文件针对的是ListView的item,而不是整个ListView:

xmlversion="

1.0"

encoding="

utf-8"

?

>

<

LinearLayout

xmlns:

android="

android:

orientation="

horizontal"

layout_width="

fill_parent"

layout_height="

>

<

ImageView

id="

@+id/lvw_custom_img"

wrap_content"

layout_gravity="

center_vertical"

layout_margin="

5dip"

background="

@drawable/custom"

/>

vertical"

TextView

@+id/lvw_custom_name"

layout_marginLeft="

layout_marginRight="

layout_marginTop="

textSize="

25dip"

text="

item名称"

/>

@+id/lvw_custom_description"

10dip"

item描述..."

LinearLayout>

LinearLayout>

2、取得用于ListView的数据集合,类型是ArrayList<

map>

,每一个Map对应于ListView的一个item,多个map就构成了ListView的数据集合:

/**

*取得用于ListView的数据

*@return

*/

privateArrayList<

hashmap>

getItems(){

ArrayList<

items=newArrayList<

();

for(inti=0;

i<

5;

i++){

//***********************************************

//*每一个map中的数据对应与ListView中的一个item*

//*在我自定义的布局文件中,一个item包括:

*

//*1、图片(lvw_custom_img)*

//*2、名称(lvw_custom_name)*

//*3、描述(lvw_custom_description)*

//*所以map中也至少需要包括这三项数据*

HashMapmap=newHashMap();

//图片,key值可以随便取,映射关系会在实例化Adapter时定义,但我喜欢将key与布局文件中定义的id取同样的值

//value值为图片的资源id

map.put("

lvw_custom_img"

R.drawable.custom);

//名称

lvw_custom_name"

);

//描述

lvw_custom_description"

item描述"

items.add(map);

}

returnitems;

}<

/hashmap<

/hashmap

3、为ListView设置SimpleAdapter:

//取得ListView实例

ListViewlvwCustom=(ListView)findViewById(R.id.lvw_custom);

items=getItems();

//************************************************************************

//*new一个SimpleAdapter*

//*items为数据集合*

//*R.layout.lvw_custom为自定义的ListView布局文件*

//*第四个参数为map中德key集合*

//*第五个参数为自定义布局文件中空间的资源id集合,与第四个参数要一一对应*

SimpleAdapteradapter=newSimpleAdapter(this,items,R.layout.lvw_custom,

newString[]{"

"

},

newint[]{R.id.lvw_custom_img,R.id.lvw_custom_name,R.id.lvw_custom_description});

lvwCustom.setAdapter(adapter);

三、显示非资源id类型图片的ListView

通过上面的例子可以看到Map中图片项的value是资源id,这是针对项目中已存在的图片文件,为什么要用资源id而不是其他(比如Bitmap类型)呢,这是因为adapter的bindView()方法是负责解析图片并将其显示到ImageView中,但它只针对资源id类型做了判断。

然而有一种情况,比如你的图片是从网络读取的Bitmap类型,你就需要对代码进行改写了。

分析SimpleAdapter的源码,发现getView()方法是负责够造界面布局的的,而getView又是调用bindView来往控件里填充值的,所以我这里对bindView()方法进行改写。

新建一个类CustomImageAdapter,代码完全copy自SimpleAdapter,找到bindView方法,对其进行改写:

privatevoidbindView(intposition,Viewview){

finalMapdataSet=mData.get(position);

if(dataSet==null){

return;

finalViewBinderbinder=mViewBinder;

finalView[]holder=mHolders.get(view);

finalString[]from=mFrom;

finalint[]to=mTo;

finalintcount=to.length;

for(inti=0;

count;

finalViewv=holder[i];

if(v!

=null){

finalObjectdata=

Stringtext=data=null?

"

"

:

data.toString();

if(text==null){

text="

;

booleanbound=false;

if(binder!

bound=binder.setViewValue(v,data,text);

if(!

bound){

if(vinstanceofCheckable){

if(datainstanceofBoolean){

((Checkable)v).setChecked((Boolean)data);

}else{

thrownewIllegalStateException(v.getClass().getName()+

shouldbeboundtoaBoolean,nota"

+data.getClass());

}elseif(vinstanceofTextView){

//Note:

keeptheinstanceofTextViewcheckatthebottomofthese

//ifssincealotofviewsareTextViews(e.g.CheckBoxes).

setViewText((TextView)v,text);

}elseif(vinstanceofImageView){

if(datainstanceofInteger){

setViewImage((ImageView)v,(Integer)data);

}

//这里增加对Bitmap类型的判断

elseif(datainstanceofBitmap){

((ImageView)v).setImageBitmap((Bitmap)data);

else{

setViewImage((ImageView)v,text);

thrownewIllegalStateException(v.getClass().getName()+"

isnota"

+

viewthatcanbeboundsbythisSimpleAdapter"

然后像自定义ListView的步骤一样使用就行了,只是把SimpleAdapter替换为CustomImageAdapter,Map中图片项的value变为Bitmap类型了。

四、Item使用不同布局的ListView

通过前面的例子可以看到,ListView的所有item使用的都是相同的布局,如果想使用不同的布局呢?

这个例子是我从以前做的音乐播放器代码里找的,效果图:

MP3的封面图片突然不显示了,不知道咋回事。

1、在Map中存放的键值对中多增加一项布局类型:

*根据playlistId获得歌曲列表,用于ListView显示

*

*@paramplaylistId

*0表示所有歌曲

privateList<

getSongList(intplaylistId){

//取得符合条件的所有歌曲

Listsongs=getSongs(playlistId);

//构造SongList的数据

List<

list=newArrayList<

Mapmap1=newHashMap();

//这里的Type是用于在getView方法中判断并构造布局的

map1.put("

type"

TYPE_BTN);

id"

ID_RANDOM_PLAY);

mainlist_btn_name"

随机播放"

mainlist_btn_img"

R.drawable.list_random_icon);

list.add(map1);

if(songs!

intsize=songs.size();

size;

Songsong=songs.get(i);

Mapmap=newHashMap();

TYPE_SONG_LIST);

song.getId());

Bitmapbm=MusicHelper.getArtwork(this,song.getId(),song

.getAlbumId(),true);

songlist_cover_img"

bm);

songlist_song_name"

song.getTitle());

songlist_song_album"

song.getAlbum());

songlist_song_artist"

song.getArtist());

list.add(map);

returnlist;

/map<

/map

2、为不同的item布局分别定义不同的布局文件。

list_songs.xml:

RelativeLayout

@+id/songlist_cover_img"

48dip"

layout_alignParentLeft="

true"

layout_centerVertical="

6dip"

layout_toRightOf="

@id/songlist_cover_img"

layout_alignParentRight="

TextView

@+id/songlist_song_name"

layout_marginBottom="

3dip"

24dip"

textColor="

@drawable/black"

TextView>

@+id/songlist_song_album"

@+id/songlist_song_artist"

TextView>

RelativeLayout>

list_main_btn.xml:

@+id/mainlist_btn_name"

28dip"

@+id/mainlist_btn_img"

3、自定义Adapter类SongListAdapter,继承自BaseAd

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1