【发布时间】:2019-03-27 19:04:08
【问题描述】:
我不知道问题出在哪里,但是相同的代码在 java 中可以正常工作 这是我的适配器类:
class MainAdapter(private val context: Context, private val firebaseVisionlabel: ArrayList<FirebaseVisionLabel>) : RecyclerView.Adapter<CustomViewHolder>() {
override fun getItemCount(): Int {
return firebaseVisionlabel.size
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CustomViewHolder {
val v = LayoutInflater.from(context).inflate(R.layout.list_items,p0,false)
return CustomViewHolder(v)
}
override fun onBindViewHolder(p0: CustomViewHolder, p1: Int) {
val firebaseVisionLabel = firebaseVisionlabel?.get(p1)
val label = firebaseVisionLabel?.label
val confidence =firebaseVisionLabel?.confidence.toString()
p0.itemView.textView.text = label
p0.itemView.confidence.text = confidence
}
} 类 CustomViewHolder(v:View) : RecyclerView.ViewHolder(v)
MainActivity:(全局声明)
var fileUri: Uri? = null
var TAG = "MainActivity"
var firebaseVisionLabels : ArrayList<FirebaseVisionLabel>? = null
在 onCreate 中:
rec_view.layoutManager = LinearLayoutManager(this)
rec_view.setHasFixedSize(true)
按钮:
detect_button.setOnClickListener{
imageRecognition()
}
功能:
private fun imageRecognition() {
var bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, fileUri)
var image = FirebaseVisionImage.fromBitmap(bitmap)
val labeler = FirebaseVision.getInstance().visionLabelDetector
labeler.detectInImage(image)
.addOnSuccessListener { labels ->
for (label in labels) {
val text = label.label
val entityId = label.entityId
val confidence = label.confidence
Log.d("TAG", "$text $confidence") //logcat works
firebaseVisionLabels?.add(label)
//Main problem??
rec_view.adapter = firebaseVisionLabels?.let { MainAdapter(this, it) }
}
}.addOnFailureListener { e ->
// Task failed with an exception
// ...
detect_button.isEnabled = true
Log.d(TAG,e.toString())
}
}
Logcat 打印出预期的输出,但我不知道 recyclerview 中的问题是什么。我不想放一堆相机和画廊意图代码,它们工作正常。感谢您的帮助。
【问题讨论】:
-
notifyDataSetChanged 的调用在哪里? stackoverflow.com/questions/26635841/…
标签: android firebase kotlin android-recyclerview