Kotlin RecyclerView без адаптера прилагается пропуск пропуска - PullRequest
0 голосов
/ 27 марта 2019

Я не знаю, в чем проблема, но тот же код отлично работает в 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

InCreate:

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 печатает ожидаемые результаты, но я не знаю, в чем проблема в обзоре переработчика.Я не хочу ставить кучу кодов камер и интентов, они отлично работают.Спасибо за помощь.

1 Ответ

0 голосов
/ 28 марта 2019

Я решил, изменив RecyclerView на BaseAdapter, а параметр на ArrayList. Я думаю, что RecyclerView может работать так же с Basedapter, изменяя параметр private val firebaseVisionlabel: ArrayList<FirebaseVisionLabel> to private val labeltext : ArrayList<String> Я думаю, что это ошибка между 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...