Android 如何在getter setter方法中定义Imageview
你好,伙计,我是Kotlin android的新手,在这个演示中正在制作一个演示,我正在尝试从图库中获取一个图像,并将其设置在我的recyclerview中,但我得到的解决方案要求您提前为我找到一个解决方案,谢谢 这是我的CustomAdapter.kt:-Android 如何在getter setter方法中定义Imageview,android,kotlin,android-recyclerview,android-handler,Android,Kotlin,Android Recyclerview,Android Handler,你好,伙计,我是Kotlin android的新手,在这个演示中正在制作一个演示,我正在尝试从图库中获取一个图像,并将其设置在我的recyclerview中,但我得到的解决方案要求您提前为我找到一个解决方案,谢谢 这是我的CustomAdapter.kt:- package com.example.itemgetset import android.app.Activity import android.app.AlertDialog import android.content.Conten
package com.example.itemgetset
import android.app.Activity
import android.app.AlertDialog
import android.content.ContentValues.TAG
import android.content.Intent
import android.os.Build
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.PopupMenu
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.snackbar.Snackbar
@Suppress("UNREACHABLE_CODE")
class CustomAdapter(
private var activity: Activity,
private val userList: ArrayList<ProductInfoGetSet>,
private var isforlist: Boolean,
) :
RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemview=
LayoutInflater.from(parent.context).inflate(R.layout.list_layout, parent, false)
return ViewHolder(itemview)
}
@RequiresApi(Build.VERSION_CODES.N)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val productInfoGetSet: ProductInfoGetSet = userList[position]
holder.image = productInfoGetSet.image
holder.txtId.text = productInfoGetSet.id
holder.txtName.text = productInfoGetSet.name
holder.txtQuantity.text = productInfoGetSet.quantity
holder.txtPrice.text = productInfoGetSet.price
val id = userList[position].id
Log.e(TAG, "List item ID: $id")
holder.buttonViewOption.setOnClickListener {
val popup = PopupMenu(activity, holder.buttonViewOption)
popup.inflate(R.menu.pop_menu)
popup.setOnMenuItemClickListener { item ->
when (item.itemId) {
R.id.edit -> {
val intent = Intent(activity, AddDetails::class.java)
intent.putExtra("isFor", "Update")
intent.putExtra("id", productInfoGetSet.id)
intent.putExtra("image",productInfoGetSet.image)
intent.putExtra("name", productInfoGetSet.name)
intent.putExtra("quantity", productInfoGetSet.quantity)
intent.putExtra("price", productInfoGetSet.price)
activity.startActivity(intent)
}
R.id.delete -> {
val builder = AlertDialog.Builder(activity)
builder.setTitle("Delete")
builder.setMessage("Do you want to delete the item?")
builder.setPositiveButton("Yes") { _, _ ->
userList.removeAt(position)
notifyItemRemoved(position)
val snack = Snackbar
.make(
holder.linearly,
"Item was removed from the list.",
Snackbar.LENGTH_SHORT
)
snack.show()
}
builder.setNegativeButton("No") { _, _ ->
}
val dialog: AlertDialog = builder.create()
dialog.show()
}
}
false
}
popup.show()
}
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getItemCount(): Int {
return userList.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val txtName = itemView.findViewById(R.id.txt_name) as TextView
val txtId = itemView.findViewById(R.id.txt_id) as TextView
var image = itemView.findViewById(R.id.imageView2) as ImageView
val txtQuantity = itemView.findViewById(R.id.txt_quantity) as TextView
val txtPrice = itemView.findViewById(R.id.txt_price) as TextView
val linearly: LinearLayout = itemView.findViewById(R.id.linearlayout)
val buttonViewOption = itemView.findViewById<View>(R.id.txt_Options) as TextView
}
}
温度kt:-
package com.example.itemgetset
import android.widget.ImageView
class Temp {
var id: String = ""
var image: ImageView =
var name: String = ""
var quantity: String = ""
var price: String = ""
}
提前谢谢 最好显示ProductInfoGetSet类和错误日志 您不应该直接设置图像
holder.image = productInfoGetSet.image
相反,您可以获取图像的URI,然后将其设置为
holder.image.setImageUri(imageUri)
如果您仍然遇到问题,那么您可以使用我知道您是Android新手。我将在下面列出一些要点,以便您清楚地理解
您试图将一个ImageView设置为另一个不正确的ImageView。临时文件不正确,在=。所以临时文件也必须有错误。“holder.image”是ImageView,“productInfoGetSet.image”是图像URL(我认为是字符串),所以可能是问题的原因,您可以通过调用一些ImageView方法来设置像holder.image.setImageURI(此处为imageUrl)这样的图像来设置临时文件吗。我在我的Temp.kt文件中尝试了它,我也会更改它,但我不知道如何定义imageview我将textview定义为“var name:String=”“”你能帮我一下吗?我尝试了这个,但现在我必须在Temp.kt文件中定义image,我遇到了一个错误,我不知道如何定义imageview,请帮我一下。提前谢谢。我还编辑并放置了该文件,请查看。问题似乎出在
temp.image=imageview.toString()
中,我也对其进行了更改。但现在的问题是在Temp.kt文件中定义ImageView。这样做无法获取路径或URI。相反,您应该更改ProductInfoGetSet和Temp中映像的数据类型。另外,在AddDetails.kt中将imageView的数据类型更改为URI,并使用onActivityResult中的URI对其进行初始化。最后,将CustomAdapter中的行holder.image=productInfoGetSet.image
更改为holder.image.setImageUri(productInfoGetSet.image)
。我现在唯一的问题是如何在getter setter中设置图像。任何人都可以在这方面提供帮助。是的,现在只有一个错误,我必须在ImageView=中定义一些东西,但问题是我不知道如何定义它。请在这方面帮助我。在模型中使用ImageView的方法不正确,正如我在第1点和第4点中提到的。您应该切换到数据绑定或在模型中设置url,并在运行时将其加载到ImageView.temp.image=ImageView.toString()这也是错误的我现在唯一的问题是如何在getter setter中设置图像。任何人都可以在这方面提供帮助。@Jay3421-您不能使用getter setter设置图像。您可以拥有url并在Imageview上使用setImageUri方法进行设置,也可以拥有可绘制资源Id并在Imageview上使用setImageResource进行设置。
package com.example.itemgetset
import android.widget.ImageView
class Temp {
var id: String = ""
var image: ImageView =
var name: String = ""
var quantity: String = ""
var price: String = ""
}
holder.image = productInfoGetSet.image
holder.image.setImageUri(imageUri)