【发布时间】:2018-09-26 09:21:44
【问题描述】:
如何使用 kotlin 将可绘制对象中的图像动态添加到回收站视图中?这是我的 MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.get = Get()
//parse array klaxon
var products = Klaxon().parseArray<ProductData>(addProducts())
if (!products!!.isEmpty()) {
product_list.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
product_list.hasFixedSize()
product_list.adapter = ProductAdapter(products, { item: ProductData-> item })
}
}
private fun addProducts(): String {
return application.assets.open("product_data.json").bufferedReader().use{
it.readText()
}
}
private fun read(): String {
return application.assets.open("text.json").bufferedReader().use{
it.readText()
}
}
fun Get() : Data {
val data = Klaxon()
.parse<Data>(read())
if(data == null) return Data(
"",
"",
"",
"",
"",
"",
"",
"",
""
)
return data
}
}
这是我的适配器ProductAdapter
class ProductAdapter (var productList: List<ProductData>, var clickListener: (ProductData) -> Unit) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
var v = LayoutInflater.from(parent.context).inflate(R.layout.product_lists_item, parent, false)
return ListHolder(v)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as ListHolder).bind(productList[position], clickListener)
}
override fun getItemCount() = productList.size
class ListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(_list: ProductData, clickListener: (ProductData) -> Unit) {
itemView.product_item.text = _list.product_name
itemView.setOnClickListener { clickListener(_list) }
}
}
}
这是我的数据类,ProductData.kt
data class ProductData (
var product_name: String
//do I need to declare the image here?
)
这里我使用 JSON 获取数据,product_data.json
[ {
"product_name": "Flexible Hose Tangki Air Penguin",
"product_image": "flexible_hose_tangki_air_penguin_1_fu.jpg"
},
{
"product_name": "Foot Valve / Tusen Klep Tangki Air Penguin",
"product_image": "foot_valve_tusen_klep_tangki_air_penguin_1_fu.jpg"
},
{
"product_name": "Gasket Aksesoris Tangki Air Penguin",
"product_image": "gasket_aksesoris_tangki_air_penguin_1_fu.jpg"
}
]
我能够显示回收站视图,但不能显示图像数据。我需要将图像放在产品名称的顶部。 我应该用毕加索吗?或不?提前致谢。
【问题讨论】:
-
是的,使用毕加索,并在模型中定义位图。
-
获取图片文件怎么样?我是毕加索的新手,所以我不知道如何使用 kotlin。
-
你是从服务器获取图片 url 还是从 drawable 添加图片?
-
我需要先从drawable中获取图片
-
下面的解决方案可以试试。