если еще в AlertDialog не работает Android kotlin - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь отредактировать и обновить уже сохраненные данные карты банкомата. Я использую Alert Dialog с Layout для редактирования данных карты. Здесь пользователь после заполнения деталей нажимает на положительную (обновляемую) кнопку Alert Dialog и не закрывается, вместо этого он проверяет пользовательский ввод.

Но проблема в том, что когда пользователь вводит имя держателя карты (или любую другую информацию) и нажимает на обновление (кнопка «Позитив»), он по-прежнему показывает тот же тост, что и «Поле держателя карты не заполнено». Кажется, что детали не обновляются с последними деталями. Пожалуйста, помогите мне в решении проблемы.

override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
    val card: Cards = cards[p1]


    p0.BankName.text = card.bankName
    p0.CVV.text = card.cardCVV
    p0.CardHolderName.text = card.cardHolderName
    p0.Expire.text = card.validity
    p0.CardNumber.text = card.cardNumber

    p0.optionsMenu.setOnClickListener(View.OnClickListener {
        val popupMenu = PopupMenu(mContext, p0.optionsMenu)
        popupMenu.inflate(R.menu.option_menu)
        popupMenu.setOnMenuItemClickListener { item ->
            when (item.itemId) {
                R.id.mnu_item_Edit -> {
                    var message: String = "Details Updated"
                    val inflater = LayoutInflater.from(mContext)
                    val view = inflater.inflate(R.layout.update1, null)

                    var builder = AlertDialog.Builder(mContext)
                        .setTitle("Update Card details")
                        .setView(view)
                        .setPositiveButton("Update", DialogInterface.OnClickListener { dialog, which -> })
                        .setNegativeButton("Cancel", DialogInterface.OnClickListener { dialog, which -> })
                    val alert = builder.create()
                    alert.show()


                    alert.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener {
                        val isUpdate: Boolean = MainActivity.dbHander.editCard(
                            card.cardID.toString(),
                            view.uBankName.text.toString(),
                            view.uCardNumber.text.toString(),
                            view.uCardCVV.text.toString(),
                            view.uCardHolder.text.toString(),
                            view.uCardValidity.text.toString()
                        )

                        if (isUpdate == true) {

                            cards[p1].bankName = view.uBankName.text.toString()
                            cards[p1].cardHolderName = view.uCardHolder.text.toString()
                            cards[p1].cardNumber = view.uCardNumber.text.toString()
                            cards[p1].cardCVV = view.uCardCVV.text.toString()
                            cards[p1].validity = view.uCardValidity.text.toString()
                            notifyDataSetChanged()
                            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show()
                            alert.dismiss()
                        }
                    })
                }
            }
            popupMenu.show()
        }
    })

}

Я проверяю пользовательские данные по методу ниже

fun editCard(
    cardId: String,
    bankName: String,
    cardHolderName: String,
    cardCVV: String,
    validity: String,
    cardNumber: String
): Boolean {

    var result: Boolean = false

    if (bankName.isNullOrEmpty()) {
        Toast.makeText(toast, "Bank Name should not be blank", Toast.LENGTH_SHORT).show()

    } else if (cardHolderName.isNullOrEmpty()) {
        Toast.makeText(toast, "Card Holder Name should not be blank", Toast.LENGTH_SHORT).show()
    } else if (cardNumber.isNullOrEmpty()) {
        Toast.makeText(toast, "Card number should not be blank", Toast.LENGTH_SHORT).show()
    } else if (cardNumber.length != 16) {
        Toast.makeText(toast, "Card number 16 digits", Toast.LENGTH_SHORT).show()
    } else if (validity.isNullOrEmpty()) {
        Toast.makeText(toast, "Card validity should not be blank", Toast.LENGTH_SHORT).show()

    } else if (cardCVV.isNullOrEmpty()) {

        Toast.makeText(toast, "CVV should not be blank", Toast.LENGTH_SHORT).show()

    } else if (cardCVV.length != 3) {
        Toast.makeText(toast, "Must have 3 digits", Toast.LENGTH_SHORT).show()

    } else {
        //will do something
    }
}
...