问题
之前使用listview时指定的adapter使用的是默认给定的simpleAdapter,
该默认的adapter需要指定layout的id,
成为了全部anko化的一个阻碍
现状
1 2 3 4 5 6 7 8 9
| val adapter = SimpleAdapter( this@SearchToolActivity, items, R.layout.style_listview, arrayOf("receiver_name", "phone_number", "receiver_id"), intArrayOf(R.id.receiver_name, R.id.phone_number, R.id.receiver_id) )
UI.searchResults.adapter = adapter
|
其中style~listview为~
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
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="@dimen/usernamePadding" android:paddingBottom="@dimen/usernamePadding">
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="15dp" android:orientation="horizontal">
<TextView style="@style/SmallLabel" android:text="届け先名: " />
<TextView android:id="@+id/receiver_name" style="@style/SmallLabel" android:layout_width="match_parent" android:text="receiver_name" /> </LinearLayout>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="15dp" android:orientation="horizontal">
<TextView style="@style/SmallLabel" android:text="電話番号: " />
<TextView android:id="@+id/phone_number" style="@style/SmallLabel" android:layout_width="match_parent" android:text="tel_number" /> </LinearLayout>
<TextView android:id="@+id/receiver_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="id" android:visibility="gone" />
</LinearLayout>
|
items为一系列的item,每个item有一些字段
- receiver~name~
- phone~number~
- receiver~id~
- price~s~
- price~m~
- price~l~
- price~parking~
- price~tatemochi~
该adapter把item的三个字段放进了view中的指定id对应的位置
使用方便但需要指定layout id
anko实现
anko有了自己的adapter,在lambda函数中可以使用index和items来选取特定的数据字段放入view中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| val adapter = AnkoAdapter<Map<String, Any>>({items}) { index, items, view -> verticalLayout { lparams(matchParent, wrapContent) { verticalPadding = dip(10) horizontalPadding = dip(15) } linearLayout { textView("届け先名: ") textView(items[index]["receiver_name"].toString()) } linearLayout { textView("電話番号: ") textView(items[index]["phone_number"].toString()) } textView(items[index]["receiver_id"].toString()) { visibility = View.GONE } }.applyRecursively(::SmallLabel) }
UI.searchResults.adapter = adapter
|