Добавить изображение в RecyclerView Android с помощью Kotlin - PullRequest
0 голосов
/ 26 сентября 2018

как я могу динамически добавлять изображения из нарисованного в представление переработчика с помощью 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"
  }
]

Мне удалось показать переработчикапросматривать, но не с данными изображения.Мне нужно поместить изображение в верхней части product_name.Должен ли я использовать Пикассо для этого?или нет?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Добавьте resourceId как Int в ProductData

    data class ProductData (
var productName: String , 
var drawableResourceId: Int // will be R.drawable.my_resource
)

и в свой список адаптер добавьте:

itemView.product_icon.setImageDrawable(ContextCompat.getDrawable(context, _list.drawableResourceId)

Вам необходимо добавить контекст в свой адаптер

0 голосов
/ 26 сентября 2018

JSON

[ { "product_name": "Flexible Hose Tangki Air Penguin", "product_image": "android" }, { "product_name": "Foot Valve / Tusen Klep Tangki Air Penguin", "product_image": "ios" }, { "product_name": "Gasket Aksesoris Tangki Air Penguin", "product_image": "blackberry" } ]

Если вы хотите отобразить изображение из нарисованного, добавьте еще одно поле в свой класс ProductData

data class ProductData (
var product_name: String , 
var product_image: String
)

Добавьте данные в класс ProductData, как показано ниже

var androidProduct =  ProductData(productnamefromjson,productimagenamefromjson)

Передать параметр контекста через конструктор в классе ProductAdapter -

class ProductAdapter (var context: Context,var productList: List<ProductData>, var clickListener: (ProductData) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>() 

Изменить эту строку с

product_list.adapter = ProductAdapter(products, { item: ProductData-> item })

на

product_list.adapter = ProductAdapter(this@MainActivity,products, { item: ProductData-> item })

Установить изображение в просмотре изображенийкак показано ниже -

val resources = context.getResources()
val resourceId = context.resources.getIdentifier(_list.product_image), "drawable",
            context.getPackageName())
itemview.imageview.setImageDrawable(resources.getDrawable(resourceId))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...