Получить идентификатор документа firestore из autocompletetextview в элементахItemClickListener - PullRequest
0 голосов
/ 17 ноября 2018

Моя проблема очень проста и понятна.Я уже получил данные из базы данных firestore cloud-firestore, это предлагается в AutoCompleteTextView очень хорошо, и кликабельно.Однако я хочу получить идентификатор документа firebase cloud-firestore для выбранного элемента.Протестировано с поджариванием

private var autoComplete: ArrayAdapter<String>? = null
private var itemId: String? = null

override fun onCreate(savedInstanceState: Bundle?) {
    readData(object: MyCallback {
        override fun onCallback(value: ArrayAdapter<String>) {
            Log.d(TAG, "The list has: " + value.count.toString() + " items.")
        }
    })

    textCurrentSearch.setAdapter(autoComplete)

    textCurrentSearch.onItemClickListener = OnItemClickListener { parent, view, position, id ->

        showShortToast(this@NewOrderActivity, "Item on cloud-firestore id: " + itemId!! + "Item on ArrayAdapter id: " + id)
    }
}

fun showShortToast(context: Context, message: String) {
    Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}

private fun readData(myCallback : MyCallback) {
    Log.d(TAG, "Before attaching the listener!")

    mFirebaseFirestore.collection("tblProductItems").get().addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("TAG", "Inside onComplete function!")
            for (document in task.result!!) {
                val name = document.data["name"].toString()

                itemId = document.id

                autoComplete?.add(name)
            }

            myCallback.onCallback(autoComplete!!)

        } else showShortToast(this@NewOrderActivity, task.exception!!.toString())
    }.addOnSuccessListener {
        showShortToast(this@NewOrderActivity, "")
    }

    Log.d(TAG, "After attaching the listener!")
}

interface MyCallback {
    fun onCallback(value: ArrayAdapter<String>)
}

Я пробовал с

itemId = suggestSnapshot.id

, но он не дает мне идентификатор выбранного элемента продукта.Пожалуйста, помогите с чем-нибудь конструктивным, спасибо.

1 Ответ

0 голосов
/ 18 ноября 2018

Чтобы решить эту проблему, переместите строки, в которых вы устанавливаете аддаптер, и вы прикрепляете список прямо внутри обратного вызова, например:

override fun onCreate(savedInstanceState: Bundle?) {
    mFirebaseFirestore.collection("tblProductItems").addSnapshotListener { querySnapshot, exception ->
        if (exception != null) {
            showShortToast(this@NewOrderActivity, exception.toString())
        }

        for (suggestSnapshot in querySnapshot!!.documents) {
            val suggestion = suggestSnapshot.getString("name")

            itemId = suggestSnapshot.id

            //Add the retrieved string to the list
            autoComplete?.add(suggestion)
        }
        textCurrentSearch.setAdapter(autoComplete)
        textCurrentSearch.onItemClickListener = OnItemClickListener { parent, view, position, id ->
            showShortToast(this@NewOrderActivity, "Item on cloud-firestore id: " + itemId!! + "Item on ArrayAdapter id: " + id)
        }
    }
}

API Firebase является асинхронным, что означает, что данные доступны толькоесли подождешьДля получения дополнительной информации, я рекомендую вам также увидеть мой ответ из этой записи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...