前言
如果只是想簡單的客製化ListVIew樣式,那麼利用SimpleAdapter就可以達成,原理大概就像是設計手機Layout一樣,只是變成設計ListView Item的Layout。
- ArrayAdapter – ListView 簡易用法
- SimpleCursorAdapter
- SimpleAdapter (此篇) – ListView 進階用法 -,簡易客製化ListView Item樣式
- BaseAdapter– ListView 進階用法,完整客製化ListView Item樣式
1.設計ListView Item Layout
在res/layout新增一個Layout,命名為style_listview.xml(名稱可自訂),其實List View 每一個Item都是一個Layout,知道這個原理後就看你的ListView想要怎麼呈現,以下只是簡單範例,視情況而定也可加入ImageView來豐富你的畫面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?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:background="#DEF8FF"> <LinearLayout android:id="@+id/llBorder" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp"> <TextView android:id="@+id/tvLocal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="2" android:text="TextView" android:textColor="@android:color/black" android:textSize="20sp" /> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="TextView" android:textColor="@android:color/black" android:textSize="20sp" /> </LinearLayout> </LinearLayout> |
2.結果
利用SimpleAdapter你的input資料必須要是<key,value>的型態,特別要注意的是SimpleAdapter的用法:
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
- Context context 執行環境
- List<? extends Map<String, ?>> data 帶入的資料
- int resource Layout位置
- String[] from data帶入資料的Key
- int[] to Key的值要帶到哪個元件
瞭解以上重點就直接實作程式吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { //ListView 要顯示的內容 public String[][] data = { {"★","臺北市"}, {"-","信義區"}, {"★","新北市"}, {"-","板橋區"}, {"★","桃園市"}, {"-","桃園區"}, {"★","臺中市"}, {"-","西屯區"}, {"★","臺南市"}, {"-","安平區"}, {"-","新營區"}, {"★","高雄市"}, {"-","苓雅區"}, {"-","鳳山區"} }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //將資料轉換成<key,value>的型態 List<Map<String, Object>> items = new ArrayList<Map<String,Object>>(); for (int i=0;i < data.length;i++){ Map<String, Object> item = new HashMap<String, Object>(); item.put("level", data[i][0]); item.put("name", data[i][1]); items.add(item); } //帶入對應資料 SimpleAdapter adapter = new SimpleAdapter( this, items, R.layout.style_listview, new String[]{"level", "name"}, new int[]{R.id.tvLocal, R.id.tvName} ); ListView listview = (ListView) findViewById(R.id.listview); listview.setAdapter(adapter); listview.setOnItemClickListener(onClickListView); } /*** * 點擊ListView事件Method */ private AdapterView.OnItemClickListener onClickListView = new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this,"點選第 "+(position +1) +" 個 \n內容:"+data[position][1], Toast.LENGTH_SHORT).show(); } }; } |