我想用kotlin的ListView写一个菜单展示的页面,我把菜单的所有信息都放在了叫S-Menu数据库中的Menu表中,表里面有id,菜品的名字,菜品的类型,菜品的原料,还有菜品的图片,我想用baseadapter适配器来进行数据的传输,然后在在一个活动里去获取数据库里面菜品的信息想知道这个活动和这个适配器怎么写
时间: 2024-03-12 21:43:19 浏览: 72
好的,你可以按照以下步骤来实现:
1. 首先需要定义一个实体类来存储菜品的信息,例如:
```
data class Menu(val id: Int, val name: String, val type: String, val ingredient: String, val image: Int)
```
其中,id是菜品的唯一标识,name是菜品的名字,type是菜品的类型(例如主食、饮料等),ingredient是菜品的原料,image是菜品的图片资源。
2. 然后定义一个继承自BaseAdapter的适配器类MenuAdapter,例如:
```
class MenuAdapter(private val context: Context, private val menuList: List<Menu>) : BaseAdapter() {
override fun getCount(): Int {
return menuList.size
}
override fun getItem(position: Int): Any {
return menuList[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view = convertView
val holder: ViewHolder
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_menu, null)
holder = ViewHolder()
holder.menuName = view.findViewById(R.id.tv_menu_name)
holder.menuType = view.findViewById(R.id.tv_menu_type)
holder.menuImage = view.findViewById(R.id.iv_menu_image)
view.tag = holder
} else {
holder = view.tag as ViewHolder
}
val menu = menuList[position]
holder.menuName?.text = menu.name
holder.menuType?.text = menu.type
holder.menuImage?.setImageResource(menu.image)
return view!!
}
private class ViewHolder {
var menuName: TextView? = null
var menuType: TextView? = null
var menuImage: ImageView? = null
}
}
```
在这个适配器类中,我们重写了BaseAdapter中的四个方法:getCount、getItem、getItemId和getView。其中,getCount返回菜单的数量,getItem返回指定位置的菜单对象,getItemId返回指定位置的菜单id,getView返回每个菜单项的视图。
3. 接着,在你的活动类中,你需要获取S-Menu数据库中的Menu表中的数据,例如:
```
val dbHelper = MenuDbHelper(this)
val db = dbHelper.readableDatabase
val cursor = db.query(
MenuEntry.TABLE_NAME, null,
null, null, null, null, null
)
val menuList = mutableListOf<Menu>()
with(cursor) {
while (moveToNext()) {
val id = getInt(getColumnIndexOrThrow(MenuEntry.COLUMN_ID))
val name = getString(getColumnIndexOrThrow(MenuEntry.COLUMN_NAME))
val type = getString(getColumnIndexOrThrow(MenuEntry.COLUMN_TYPE))
val ingredient = getString(getColumnIndexOrThrow(MenuEntry.COLUMN_INGREDIENT))
val image = getInt(getColumnIndexOrThrow(MenuEntry.COLUMN_IMAGE))
menuList.add(Menu(id, name, type, ingredient, image))
}
}
cursor.close()
db.close()
```
在这个代码中,我们首先创建了一个MenuDbHelper对象用于读取S-Menu数据库,然后通过query方法查询Menu表中的数据,并将其存储到一个Menu对象的列表中。
4. 最后,在你的活动类中,你需要将适配器和菜单列表绑定到ListView中,例如:
```
val listView = findViewById<ListView>(R.id.lv_menu)
val adapter = MenuAdapter(this, menuList)
listView.adapter = adapter
```
在这个代码中,我们首先通过findViewById方法获取一个名为lv_menu的ListView对象,然后创建一个MenuAdapter对象并将其绑定到ListView中。
这样,你就可以使用Kotlin的ListView写一个菜单展示的页面了。
阅读全文