【问题标题】:Kotlin RecyclerView no adapter attached skipping layoutKotlin RecyclerView 没有附加适配器跳过布局
【发布时间】: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 中的问题是什么。我不想放一堆相机和画廊意图代码,它们工作正常。感谢您的帮助。

【问题讨论】:

标签: android firebase kotlin android-recyclerview


【解决方案1】:

我通过将 RecyclerView 更改为 BaseAdapter 并将参数更改为 ArrayList 来解决。我猜 RecyclerView 可以通过更改参数 private val firebaseVisionlabel: ArrayList&lt;FirebaseVisionLabel&gt; to private val labeltext : ArrayList&lt;String&gt; 与 Basedapter 一起工作我认为这是 FirebaseVisionLabel 和 Kotlin 之间的错误 MainActivity 的修改部分:

 for (label in labels) {
                        for(i in 1..1){
                            val text = label.label
                            val entityId = label.entityId
                            val confidence = label.confidence
                            new_list.add(text)

                        }
                        list_view.adapter =MainAdapter(this,new_list)

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 2021-06-19
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多