android Adapter的用法說明
在使用ListView或是GridView時,會使用到Adapter來定義View的內容,最簡單的方式如下:
但我們通常不會只想要List或是Grid裡面只有一個TextView的,所以這邊必須要自定義一個Adapter來使用。
例如:
最基本的adapter必須具備這樣的一個架構,而我們可以從convertView = LayoutInflater.from(context).inflate(R.layout.grid, null);
去定義R.layout.grid去修改顯示的內容
最後的結果:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ListView listview = (ListView) findViewById(R.id.listview); | |
//ListView 要顯示的內容 | |
String[] str = {"新北市","台北市","台中市","台南市","高雄市"}; | |
//android.R.layout.simple_list_item_1 為內建樣式,還有其他樣式可自行研究 | |
ArrayAdapter adapter = new ArrayAdapter(this, | |
android.R.layout.simple_list_item_1, | |
str); | |
listview.setAdapter(adapter); |
但我們通常不會只想要List或是Grid裡面只有一個TextView的,所以這邊必須要自定義一個Adapter來使用。
例如:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.mp3list; | |
import com.example.mp3list.R; | |
import android.content.Context; | |
import android.content.res.Resources; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.media.MediaMetadataRetriever; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.BaseAdapter; | |
import android.widget.ImageView; | |
import android.widget.TextView; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class MusicGridAdapter extends BaseAdapter { | |
private Context context; | |
private List<MusicInfo> musicInfos; | |
private MusicInfo musicInfo; | |
private ArrayList<Bitmap> album_cover_list; | |
/** | |
* 构造函数 | |
* @param context 上下文 | |
* @param mp3Infos 集合对象 | |
*/ | |
public MusicGridAdapter(Context context, List<MusicInfo> mp3Infos, ArrayList<Bitmap> bit) { | |
this.context = context; | |
this.musicInfos = mp3Infos; | |
this.album_cover_list = bit; | |
} | |
@Override | |
public int getCount() { | |
// TODO Auto-generated method stub | |
return musicInfos.size(); | |
} | |
@Override | |
public MusicInfo getItem(int position) { | |
// TODO Auto-generated method stub | |
return this.musicInfos.get(position); | |
} | |
@Override | |
public long getItemId(int position) { | |
// TODO Auto-generated method stub | |
return 0; | |
} | |
@Override | |
public View getView(int position, View convertView, ViewGroup parent) { | |
MusicGridAdapter.ViewHolder viewHolder = null; | |
if(convertView == null) | |
{ | |
viewHolder = new MusicGridAdapter.ViewHolder(); | |
convertView = LayoutInflater.from(context).inflate(R.layout.grid, null); | |
viewHolder.musicTitle = (TextView) convertView.findViewById(R.id.grid_title); | |
viewHolder.albumImage = (ImageView) convertView.findViewById(R.id.grid_cd); | |
viewHolder.musicArtist = (TextView) convertView.findViewById(R.id.grid_art); | |
convertView.setTag(viewHolder); //表示给View添加一个格外的数据, | |
} else { | |
viewHolder = (MusicGridAdapter.ViewHolder)convertView.getTag();//通过getTag的方法将数据取出来 | |
} | |
musicInfo = musicInfos.get(position); | |
viewHolder.musicTitle.setText(musicInfo.getTitle()); //显示标题 | |
viewHolder.musicArtist.setText(musicInfo.getArtist()); //显示艺术家 | |
viewHolder.albumImage.setImageBitmap(album_cover_list.get(position));//显示bit | |
return convertView; | |
} | |
/** | |
* 定义一个内部类 | |
* 声明相应的控件引用 | |
* | |
*/ | |
public class ViewHolder { | |
//所有控件对象引用 | |
public ImageView albumImage; //专辑图片 | |
public TextView musicTitle; //音乐标题 | |
public TextView musicDuration; //音乐时长 | |
public TextView musicArtist; //音乐艺术家 | |
} | |
} |
最基本的adapter必須具備這樣的一個架構,而我們可以從convertView = LayoutInflater.from(context).inflate(R.layout.grid, null);
去定義R.layout.grid去修改顯示的內容
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:background="#ffffff"> | |
<ImageView | |
android:id="@+id/grid_cd" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:adjustViewBounds="true" | |
android:src="@drawable/cd_example"/> | |
<TextView | |
android:id="@+id/grid_title" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_below="@+id/grid_cd" | |
android:singleLine="true" | |
android:text="title" | |
android:textSize="15dp" /> | |
<TextView | |
android:id="@+id/grid_art" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_below="@+id/grid_title" | |
android:textSize="10dp" | |
android:singleLine="true" | |
android:text="art" /> | |
</RelativeLayout> |
留言
張貼留言