日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android -----ArrayAdapter的重写 .

發布時間:2025/5/22 Android 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android -----ArrayAdapter的重写 . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引自:http://blog.csdn.net/jason0539/article/details/9918465

最近需要用ArrayAdapter,保存一下,以后方便查找

ArrayAdapter(數組適配器)一般用于顯示一行文本信息,所以比較容易。

public ArrayAdapter(Context context,int textViewResourceId, List<T> objects)

上面的這行代碼來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來做兩者的適配工作,ArrayAdapter的構造需要三個參數,依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局),數據源(一個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("一個喜歡的事業");return list;} } <SPAN style="BACKGROUND-COLOR: #ffffff; FONT-FAMILY: Arial"></SPAN>

?

注意:這里的android.R.layout.simple_expandable_list_item_1是系統內置布局,樣式就是如下

?

例子二:這個例子可以增加一個ImageView,但是在設置ArrayAdapter的時候需要增加這個自定義的布局</SPAN>?

?

public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

?

上面的第一個參數是上下文,一般為this。第二個參數是自定義的布局文件,比如下面的就是R.layout.list_item。第三個參數是布局中用來顯示文字的TextView的id,第四個參數是數據集合,跟例一一樣

<?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,//區別就在這一行和下一行,這里是自己定義的布局文件,R.id.tv,//這是R.layout.list_item中TextView的ID,用來確定把添加進來的數據顯示在哪個位置 getData());lv.setAdapter(adapter);}private ArrayList<String> getData(){list.add("180平米的房子");list.add("一個勤勞漂亮的老婆");list.add("一輛寶馬");list.add("一個強壯且永不生病的身體");list.add("一個喜歡的事業");return list;} }

效果如下:

例子3:實現更復雜的效果:

這就需要重寫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; // 獲取數據 File file = getItem(position); String fileName = file.getName(); Bitmap bitmap = getBitmapFromFile(file);// 系統顯示列表時,首先實例化一個適配器(這里將實例化自定義的適配器)。 // 當手動完成適配時,必須手動映射數據,這需要重寫getView()方法。 // 系統在繪制列表的每一行的時候將調用此方法。 // getView()有三個參數, // position表示將顯示的是第幾行, // covertView是從布局文件中inflate來的布局。 // 我們用LayoutInflater的方法將定義好的image_item.xml文件提取成View實例用來顯示。 // 然后將xml文件中的各個組件實例化(簡單的findViewById()方法)。 // 這樣便可以將數據對應到各個組件上了。 // 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; }// 獲取控件,填充數據 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. 綁定數據

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); }

基本就是這樣了

?

?

轉載于:https://www.cnblogs.com/Anita9002/p/4234292.html

總結

以上是生活随笔為你收集整理的Android -----ArrayAdapter的重写 .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。