AndroidStudio kotlin AlertDialogue со счетчиком, заполненным setItems - PullRequest
0 голосов
/ 28 мая 2020

Я хочу показать модальный диалог, чтобы пользователь мог выбрать устройство Bluetooth в том случае, если я не могу угадать его по именам устройств.

Похоже, что AlertDialogue имеет возможность показать счетчик / раскрывающийся список.

В построителе диалоговых окон предупреждений есть метод setItems, который, кажется, мне нужен, однако его параметр CharSequence[], но у меня есть какой-то массив строк (я не могу точно сказать, что у меня есть, потому что все просто val).

    private fun showDialog() {
        val names = (bta!!.bondedDevices).map { z -> z.name }; 
        // What is the type of names? How can you find this out?
        // How can you make it into a CharSequence[]?

        val ab = AlertDialog.Builder(this);
        ab.setTitle("Select device");
        ab.setIcon(android.R.drawable.ic_dialog_alert); // I'd prefer a question mark.
        ab.setPositiveButton("Select"){dialogueInterface, which -> Toast.makeText(applicationContext, "Selected", Toast.LENGTH_LONG).show()};
        ab.setNeutralButton("Cancel"){dialogueInterface, which -> Toast.makeText(applicationContext, "Cancelled", Toast.LENGTH_LONG).show()};

        ab.setItems(names); // None of the following functions can be called with the arguments supplied.
        val a = ab.create();
        a.setCancelable(false);
        a.show();
    }

Я думаю, что это работает в Java, но не в kotlin

CharSequence[] cs = list.toArray(new CharSequence[list.size()]);

Итак:

  • Как в AndroidStudio узнать тип переменной? (В VisualStudio, если вы наведете курсор на var, всплывающая подсказка сообщит вам.)
  • Как в kotlin вы создадите CharSequence[]?

1 Ответ

0 голосов
/ 28 мая 2020
    fun elmFind() {
        // Find device
        val pairedDevices: Set<BluetoothDevice>? = bta!!.bondedDevices

        // Try to guess.
        for (device in pairedDevices!!) {
            if (device.name.contains("obd")) {
                elmConnect(device.name);
                return;
            }
        }

        // Still going therefore didn't find one therefore ask.

        val cs: Array<CharSequence> = pairedDevices.map { z -> z.name }.toTypedArray()
        var elmDeviceName: String = ""

        val ab = AlertDialog.Builder(this);
        ab.setTitle("Select device");
        ab.setIcon(android.R.drawable.ic_dialog_alert);
        ab.setPositiveButton("Select") { dialogueInterface, which ->
            elmConnect(elmDeviceName);
        };
        ab.setNeutralButton("Cancel") { dialogueInterface, which ->
            Toast.makeText(
                applicationContext,
                "Cancelled",
                Toast.LENGTH_LONG
            ).show()
        };
        ab.setItems(cs) { dialog, which -> elmDeviceName = cs[which].toString() };
        val a = ab.create();
        a.setCancelable(false);
        a.show();
    }

Будет ли это работать с локальной переменной elmDeviceName, используемой для получения значения выбранного элемента в случае нажатия кнопки OK?

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