Android -----ArrayAdapter的重写 .
引自:http://blog.csdn.net/jason0539/article/details/9918465
最近需要用ArrayAdapter,保存一下,以后方便查找
ArrayAdapter(數(shù)組適配器)一般用于顯示一行文本信息,所以比較容易。
public ArrayAdapter(Context context,int textViewResourceId, List<T> objects)上面的這行代碼來裝配數(shù)據(jù),要裝配這些數(shù)據(jù)就需要一個連接ListView視圖對象和數(shù)組數(shù)據(jù)的適配器來做兩者的適配工作,ArrayAdapter的構(gòu)造需要三個參數(shù),依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局),數(shù)據(jù)源(一個List集合)。同時用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<String> list = new ArrayList<String>();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView)findViewById(R.id.listview);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData());lv.setAdapter(adapter);}private ArrayList<String> getData(){list.add("180平米的房子");list.add("一個勤勞漂亮的老婆");list.add("一輛寶馬");list.add("一個強壯且永不生病的身體");list.add("一個喜歡的事業(yè)");return list;} } <SPAN style="BACKGROUND-COLOR: #ffffff; FONT-FAMILY: Arial"></SPAN>?
注意:這里的android.R.layout.simple_expandable_list_item_1是系統(tǒng)內(nèi)置布局,樣式就是如下
?
例子二:這個例子可以增加一個ImageView,但是在設(shè)置ArrayAdapter的時候需要增加這個自定義的布局</SPAN>?
?
public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)?
上面的第一個參數(shù)是上下文,一般為this。第二個參數(shù)是自定義的布局文件,比如下面的就是R.layout.list_item。第三個參數(shù)是布局中用來顯示文字的TextView的id,第四個參數(shù)是數(shù)據(jù)集合,跟例一一樣
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><ImageView android:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher"/><TextView android:id="@+id/tv"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>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<String> list = new ArrayList<String>();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView)findViewById(R.id.listview);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,//區(qū)別就在這一行和下一行,這里是自己定義的布局文件,R.id.tv,//這是R.layout.list_item中TextView的ID,用來確定把添加進來的數(shù)據(jù)顯示在哪個位置 getData());lv.setAdapter(adapter);}private ArrayList<String> getData(){list.add("180平米的房子");list.add("一個勤勞漂亮的老婆");list.add("一輛寶馬");list.add("一個強壯且永不生病的身體");list.add("一個喜歡的事業(yè)");return list;} }效果如下:
例子3:實現(xiàn)更復雜的效果:
這就需要重寫getView方法了,
1. 自定義列表樣式
image_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <ImageView android:id="@+id/item_thumbnail" android:layout_height="48dip" android:layout_width="48dip" /> <TextView 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" /> </LinearLayout>2. 自定義ArrayAdapter
public class ImageListAdapter extends ArrayAdapter<File>{ private int resource; public ImageListAdapter(Context context, int resourceId, List<File> 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ù)據(jù),這需要重寫getView()方法。 // 系統(tǒng)在繪制列表的每一行的時候?qū)⒄{(diào)用此方法。 // getView()有三個參數(shù), // position表示將顯示的是第幾行, // covertView是從布局文件中inflate來的布局。 // 我們用LayoutInflater的方法將定義好的image_item.xml文件提取成View實例用來顯示。 // 然后將xml文件中的各個組件實例化(簡單的findViewById()方法)。 // 這樣便可以將數(shù)據(jù)對應到各個組件上了。 // 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<File> fileList = new ArrayList<File>(); for(File file : files) { fileList.add(file); }ImageListAdapter adapter = new ImageListAdapter(ImageFilesListActivity.this, R.layout.image_item, fileList); setListAdapter(adapter); }基本就是這樣了
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Anita9002/p/4234292.html
總結(jié)
以上是生活随笔為你收集整理的Android -----ArrayAdapter的重写 .的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LeetCode] Same Tree
- 下一篇: 商场促销——策略模式