ListView 自訂排版
主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2, R.drawable.dog3, R.drawable.dog4, R.drawable.dog5, R.drawable.dog6, R.drawable.dog7, R.drawable.dog8, R.drawable.dog9,R.drawable.dog10,
R.drawable.dog11, R.drawable.dog12, R.drawable.dog13, R.drawable.dog14, R.drawable.dog15, R.drawable.dog16, R.drawable.dog17, R.drawable.dog18, R.drawable.dog19, R.drawable.dog20; // 狗狗名字 String[] name = new String[]{" 杜賓狗 ","BBB","CCC","AAA","BBB","CCC","AAA","BBB","CCC","AAA","BBB","AAA","BBB", "CCC","AAA","BBB","CCC","AAA","BBB","CCC","AAA","BBB"; // 狗狗生日 String[] birthday = new String[]{"2011/2/1","2009/4/5","2005/8/9","2011/2/1","2009/4/5","2005/8/9"," 2011/2/1","2009/4/5","2005/8/9", "2011/2/1","2009/4/5","2005/8/9","2011/2/1","2009/4/5","2005/8/9","2009/4/5","2005/8/9","2011/2/1","2009/4/5","2005/8/9"; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main3); listview = (ListView) findviewbyid(r.id.listview); // 將資料存入 ArrayList 的物件中, 每筆有三個 HashMap 物件 ( 即 : 圖片 名字 生日 ) ArrayList<HashMap<String,Object>> list= new ArrayList<>(); HashMap<String,Object > hashmap ; for(int i=0;i<pic.length;i++) { hashmap = new HashMap<>(); hashmap.put("pic",pic[i]); hashmap.put("name",name[i]); hashmap.put("birthday",birthday[i]); list.add(hashmap);
// 將資料來源給 SimpleAdapter, 參數分別為 Context, 自訂顯示的排版 HashMap 的 Key 對應要顯示在排版上的原件名稱 SimpleAdapter adapter= new SimpleAdapter(this,list,R.layout.listitem,new String[]{"pic","name","birthday",new int[]{r.id.itemimageview,r.id.itemtext1,r.id.itemtext2 ); listview.setadapter(adapter); listview.setonitemclicklistener(new ListView.OnItemClickListener() { @Override public void onitemclick(adapterview<?> parent, View view, int position, long id) { Log.d(" 狗狗 : ", String.valueOf(position)); TextView t1 =(TextView) view.findviewbyid(r.id.itemtext1); TextView t2 =(TextView) view.findviewbyid(r.id.itemtext2); ImageView img = (ImageView) view.findviewbyid(r.id.itemimageview); t1.settext(" 抓到你 "); t2.settext(" 跑不掉啦!"); img.setimageresource(r.drawable.dog11); ); listview.setonitemlongclicklistener(new ListView.OnItemLongClickListener() { @Override public boolean onitemlongclick(adapterview<?> parent, View view, int position, long id) { Log.d(" 狗狗 : ", " 還原狗狗資料 "); TextView t1 =(TextView) view.findviewbyid(r.id.itemtext1); TextView t2 =(TextView) view.findviewbyid(r.id.itemtext2);
ImageView img = (ImageView) view.findviewbyid(r.id.itemimageview); // 回復原有資料 t1.settext(name[position]); t2.settext(birthday[position]); img.setimageresource(pic[position]); return true; ); ---------------- 主程式的排版, 裡面只安排一個 ListView 元件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.example.stust.demo2016.main3activity" android:orientation="vertical"> <ListView android:layout_height="wrap_content" android:id="@+id/listview" /> </LinearLayout> --------------- ListView 子項目的自訂排版 listitem.xml, 可以顯示一張圖片, 兩筆文字 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:layout_width="120dp" android:layout_height="100dp" android:id="@+id/itemimageview" android:src="@drawable/dog1" /> <LinearLayout android:orientation="vertical" android:layout_height="match_parent"> <TextView android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancelarge" android:text="large Text" android:id="@+id/itemtext1" android:background="#adf2fc" android:textsize="32dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancelarge" android:text="large Text" android:id="@+id/itemtext2" /> </LinearLayout> </LinearLayout>