昨天介紹了ArrayAdapter的使用,今天介紹一下更加實(shí)用的一點(diǎn),對它進(jìn)行重寫,滿足自己的個性化設(shè)計(jì)需要.
ArrayAdapter(數(shù)組適配器)一般用于顯示一行文本信息,所以比較容易。
public ArrayAdapter(Context context,int textViewResourceId, List objects)
上面的這行代碼來裝配數(shù)據(jù),要裝配這些數(shù)據(jù)就需要一個連接ListView視圖對象和數(shù)組數(shù)據(jù)的適配器來做兩者的適配工作,ArrayAdapter的構(gòu)造需要三個參數(shù),依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局),數(shù)據(jù)源(一個List集合)。同時(shí)用setAdapter()將ListView和Adapter綁定。
例子一:可以用來簡單的顯示一條文字
package jason.demo14;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Demo13Activity extends Activity {
private ListView lv;
private ArrayList list = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listview);
ArrayAdapter adapter = new ArrayAdapter(
this,
android.R.layout.simple_expandable_list_item_1,
getData());
lv.setAdapter(adapter);
}
private ArrayList getData()
{
list.add("180平米的房子");
list.add("一個勤勞漂亮的老婆");
list.add("一輛寶馬");
list.add("一個強(qiáng)壯且永不生病的身體");
list.add("一個喜歡的事業(yè)");
return list;
}
}
注意:這里的android.R.layout.simple_expandable_list_item_1是系統(tǒng)內(nèi)置布局,樣式就是如下
例子二:這個例子可以增加一個ImageView,但是在設(shè)置ArrayAdapter的時(shí)候需要增加這個自定義的布局
public ArrayAdapter(Context context, int resource, int textViewResourceId, List objects)
上面的第一個參數(shù)是上下文,一般為this。第二個參數(shù)是自定義的布局文件,比如下面的就是R.layout.list_item。第三個參數(shù)是布局中用來顯示文字的TextView的id,第四個參數(shù)是數(shù)據(jù)集合,跟例一一樣
Activity的java代碼:
package jason.demo14;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Demo13Activity extends Activity {
private ListView lv;
private ArrayList list = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listview);
ArrayAdapter adapter = new ArrayAdapter(
this,
R.layout.list_item,//區(qū)別就在這一行和下一行,這里是自己定義的布局文件,
R.id.tv,//這是R.layout.list_item中TextView的ID,用來確定把添加進(jìn)來的數(shù)據(jù)顯示在哪個位置
getData());
lv.setAdapter(adapter);
}
private ArrayList getData()
{
list.add("180平米的房子");
list.add("一個勤勞漂亮的老婆");
list.add("一輛寶馬");
list.add("一個強(qiáng)壯且永不生病的身體");
list.add("一個喜歡的事業(yè)");
return list;
}
}
效果如下:
例子3:實(shí)現(xiàn)更復(fù)雜的效果:
這就需要重寫getView方法了,
1. 自定義列表樣式
image_item.xml
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
android:id="@+id/item_thumbnail"
android:layout_height="48dip"
android:layout_width="48dip"
/>
android:id="@+id/item_file_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingLeft="5dip"
/>
2. 自定義ArrayAdapter
public class ImageListAdapter extends ArrayAdapter{
private int resource;
public ImageListAdapter(Context context, int resourceId, List objects) {
super(context, resourceId, objects);
// 記錄下來稍后使用
resource = resourceId;
}
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout imageListView;
// 獲取數(shù)據(jù)
File file = getItem(position);
String fileName = file.getName();
Bitmap bitmap = getBitmapFromFile(file);
// 系統(tǒng)顯示列表時(shí),首先實(shí)例化一個適配器(這里將實(shí)例化自定義的適配器)。
// 當(dāng)手動完成適配時(shí),必須手動映射數(shù)據(jù),這需要重寫getView()方法。
// 系統(tǒng)在繪制列表的每一行的時(shí)候?qū)⒄{(diào)用此方法。
// getView()有三個參數(shù),
// position表示將顯示的是第幾行,
// covertView是從布局文件中inflate來的布局。
// 我們用LayoutInflater的方法將定義好的image_item.xml文件提取成View實(shí)例用來顯示。
// 然后將xml文件中的各個組件實(shí)例化(簡單的findViewById()方法)。
// 這樣便可以將數(shù)據(jù)對應(yīng)到各個組件上了。
//
if(convertView == null) {
imageListView = new LinearLayout(getContext());
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(resource, imageListView, true);//把image_item.xml布局解析到LinearLayout里面
} else {
imageListView = (LinearLayout)convertView;
}
// 獲取控件,填充數(shù)據(jù)
ImageView imageView = (ImageView) imageListView.findViewById(R.id.item_thumbnail);
TextView textView = (TextView) imageListView.findViewById(R.id.item_file_name);
textView.setText(fileName);
imageView.setImageBitmap(bitmap);
return imageListView;
}
// 從文件獲取Bitmap用于填充
private Bitmap getBitmapFromFile(File file) {
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
return? bitmap;
}
}
3. 綁定數(shù)據(jù)
private void bindFilesToList(File[] files) {
List fileList = new ArrayList();
for(File file : files) {
fileList.add(file);
}
ImageListAdapter adapter = new ImageListAdapter(ImageFilesListActivity.this,
R.layout.image_item,
fileList);
setListAdapter(adapter);
}
基本就是這樣了
http://www.xuebuyuan.com/505018.html