适配器AdapterView(ArrayAdapter SimpleAdapter BaseAdapter)
Android中對于適配器的理解:
android開發中會大量使用到Listview ?而 ListView 需要適配器才能使用,不同場合使用不同的適配器。接了下來 淺談一下三個常用的適配器,概念及其使用方法。
ArrayAdapter(數組適配器) 一般用于顯示一行的文本信息,所以比較簡單。但是每個列表項只能是TextVIew?
ArrayAdapter<String> adapter=new ArrayAdapter<String>(context, resource, textViewResourceId);
上面這行代碼用來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來兩者的配合工作
context:用來連接上下文,類與類之間的相關聯
resources:布局文件ID,用來數據的顯示
textViewResourceId:數據源,用來為列表提供數據?
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="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="ArrayAdapter 數組適配器例子" /><ListView android:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>Activity:
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>(); //聲明一個List數組用于存放數據@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView)findViewById(R.id.listview);ArrayAdapter<String> adapter = new ArrayAdapter<String>( //ArraryAdapter數組適配器this,android.R.layout.simple_expandable_list_item_1,getData());<span style="white-space:pre"> </span> //添加數據lv.setAdapter(adapter);}private ArrayList<String> getData(){list.add("ListView 第一行");list.add("<span style="font-family: Arial, Helvetica, sans-serif;">ListView 第二行</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>list.add("<span style="font-family: Arial, Helvetica, sans-serif;">ListView 第三行</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>return list;} }SimpleAdapter:擴展性較強的適配器,可以適配我們各種想要的布局,而且方式較為簡單。
SimpleAdapter(Context?context,?List<??extends?Map<String,??>> data, int resource,?String[]?from, int[] to)
上面這段代碼也是用來裝配數據的。
context:聯系上下文,用來關聯simpleAdapter運行的上下文。
data:用來存儲數據,比如在getData()中存放的數據,類型要與定義一致,每條項目要與from所指條目一致。
resources:布局文件ID
from:添加到map上相關聯,數組里是列名稱的含義,通過名稱添加數據 ?(通過to找到空間ID,賦予ID一個from中的名稱)
to:數組里的ID是各個空間的ID,需要與from上的名稱相對應
如: map.put("img", R.drawable.e001); "img"對應著空間中的某個ID,添加drawable文件在該空間中顯示 <span style="font-family: Arial, Helvetica, sans-serif;"> map.put("title", "小宗");</span> map.put("info", "電臺DJ");
例子一:
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/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="3px"/><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextView android:id="@+id/title"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="16sp"/><TextViewandroid:id="@+id/info"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="10sp"/></LinearLayout></LinearLayout>
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import android.app.ListActivity; import android.os.Bundle; import android.widget.SimpleAdapter;public class Demo13Activity extends ListActivity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SimpleAdapter adapter = new SimpleAdapter(this, getData(), //simpleAdapter中對應的五個參數R.layout.main, new String[] { "img", "title", "info" }, //(上下文,數據源,布局文件,)new int[] { R.id.img, R.id.title, R.id.info });setListAdapter(adapter);}private List<Map<String, Object>> getData() {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> map = new HashMap<String, Object>();map.put("img", R.drawable.e001);map.put("title", "小宗");map.put("info", "電臺DJ");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e002);map.put("title", "貂蟬");map.put("info", "四大美女");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e04b);map.put("title", "奶茶");map.put("info", "清純妹妹");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e04e);map.put("title", "大黃");map.put("info", "是小狗");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e11a);map.put("title", "hello");map.put("info", "every thing");list.add(map);map = new HashMap<String, Object>();map.put("img", R.drawable.e11d);map.put("title", "world");map.put("info", "hello world");list.add(map);return list;} }
例子二:自定義布局,顯示網絡資源,ViewBinder的使用
由于顯示了網絡資源,所以要記得在文件清單中添加權限
<pre name="code" class="java"><uses-permission android:name="android.permission.INTERNET"/>
xml文件:
<?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="vertical" ><ListView android:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"></ListView></LinearLayout>
Activity:
import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.SimpleAdapter.ViewBinder;public class Demo13Activity extends Activity {private ListView lv;private static final String iphoneUrl = "http://www.51aigoo.com/images/20100107/6b21df8c2419480e.jpg";private static final String macbookproUrl = "http://www.esundigi.net/images/goods/20110317/6ece8f319694f0b1.jpg";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mylist);lv = (ListView)findViewById(R.id.listview);SimpleAdapter adapter = new SimpleAdapter(this, getData(),R.layout.main,new String[] {"img","title","info"},new int[] { R.id.img, R.id.title, R.id.info});//setListAdapter(adapter);adapter.setViewBinder(new MyViewBinder());lv.setAdapter(adapter);}//獲取網絡圖片資源,返回類型是Bitmap,用于設置在ListView中public Bitmap getBitmap(String httpUrl){Bitmap bmp = null;//ListView中獲取網絡圖片try {URL url = new URL(httpUrl);HttpURLConnection conn = (HttpURLConnection)url.openConnection();InputStream is = conn.getInputStream();bmp = BitmapFactory.decodeStream(is);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return bmp;}//ListView上需要顯示的數據private List<Map<String, Object>> getData() {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> map = new HashMap<String, Object>();//設置綁定是數據是圖片map.put("img", getBitmap(iphoneUrl));map.put("title", "iphone4");map.put("info", "可遠觀而買不起嫣");list.add(map);map = new HashMap<String, Object>();map.put("img", getBitmap(macbookproUrl));map.put("title", "Macbook pro");map.put("info", "明年買個玩玩");list.add(map);return list;} } //實現ViewBinder接口 class MyViewBinder implements ViewBinder {/*** view:要板頂數據的視圖* data:要綁定到視圖的數據* textRepresentation:一個表示所支持數據的安全的字符串,結果是data.toString()或空字符串,但不能是Null* 返回值:如果數據綁定到視圖返回真,否則返回假*/@Overridepublic boolean setViewValue(View view, Object data,String textRepresentation) {if((view instanceof ImageView)&(data instanceof Bitmap)){ImageView iv = (ImageView)view;Bitmap bmp = (Bitmap)data;iv.setImageBitmap(bmp);return true;}return false;}}
總結
以上是生活随笔為你收集整理的适配器AdapterView(ArrayAdapter SimpleAdapter BaseAdapter)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java mediainfo.dll_用
- 下一篇: 电子行业:万物互联,开启智能新时代