android之ArrayAdapter的重寫

昨天介紹了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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,360評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,171評論 25 708
  • 本人初學(xué)Android,最近做了一個實(shí)現(xiàn)安卓簡單音樂播放功能的播放器,收獲不少,于是便記錄下來自己的思路與知識總結(jié)...
    落日柳風(fēng)閱讀 19,460評論 2 41
  • 1、數(shù)據(jù)列表與參數(shù)設(shè)置 1.1、數(shù)據(jù)列表與遍歷 (1)返回?cái)?shù)據(jù)列表的函數(shù) ArcPy中提供了大量可以返回?cái)?shù)據(jù)列表的...
    辛立閱讀 5,574評論 2 9
  • 徐徐黃昏,茶余飯后,忙碌的世界終于沉靜下來。安排小兒開始功課后,獨(dú)自坐在沙發(fā)上,遠(yuǎn)處隱約傳來咿咿呀呀的戲曲聲,如同...
    知淑而達(dá)理閱讀 299評論 2 0

友情鏈接更多精彩內(nèi)容