0

I don't know what the problem is but same code works fine in java Here is my adapter class:

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
}

} class CustomViewHolder(v:View) : RecyclerView.ViewHolder(v)

MainActivity: (Global declaration)

var fileUri: Uri? = null
var TAG = "MainActivity"
var firebaseVisionLabels : ArrayList<FirebaseVisionLabel>? = null

In onCreate :

rec_view.layoutManager = LinearLayoutManager(this)
rec_view.setHasFixedSize(true)

Button :

detect_button.setOnClickListener{
            imageRecognition()

        }

Function :

 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 prints the expected outputs but I don't know what the problem is in recyclerview. I don't want to put bunch of camera and gallery intents codes, they works fine. Thanks for helping.

dgncn
  • 15
  • 1
  • 9
  • Where's the call to notifyDataSetChanged? https://stackoverflow.com/questions/26635841/recyclerview-change-data-set – Ian Medeiros Mar 27 '19 at 19:38

1 Answers1

0

I solved by changing RecyclerView to BaseAdapter and the parameter to ArrayList. I guess RecyclerView can work same with the Basedapter by changing the parameter private val firebaseVisionlabel: ArrayList<FirebaseVisionLabel> to private val labeltext : ArrayList<String> I think it is a bug between FirebaseVisionLabel and Kotlin Modified part for 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)
dgncn
  • 15
  • 1
  • 9