Как создать новый объект метода object.getClass () в Android? - PullRequest
0 голосов
/ 07 июля 2019

Я использую службу специальных возможностей и хочу установить для TextText специальный EditText.

Во-первых, я получаю все события на странице рекурсивно:

if(event.getClassName().equals(EditText.class.getName())){
        //event.getClassName() gets all events on a screen recursively,
        //and if it was an EditText, I want these happen:

        if(event.getSource().getText().equals("Hello")){ //special text
            event.getSource().setText("Bla Bla Bla"); //change the text
        }

}

Это выглядит нормально, но я получилIllegalStateException исключение, и согласно this я подумал, что должен создать новый объект текущего event.getClass() объекта.Я сделал это:

event.getClass() editText = new event.getClass();
if(editText.getText().equals("Hello")){ //a special text
    editText.setText("Bla Bla Bla");
}

Хорошо, я знаю, что это абсолютно неправильно, но я имею в виду нечто подобное.Затем я попробовал это:

EditText editText = (EditText) event.getClassName();

Опять же, кажется, все в порядке, но я получил это:

java.lang.ClassCastException: java.lang.String не может быть приведен к Android.widget.EditText

Как получить класс события и создать его на объекте?Я имею в виду, есть ли способ создать новый объект EditText из текущего event объекта?(В первом if блоке я проверяю, что «это конкретное событие» является EditText).

1 Ответ

0 голосов
/ 07 июля 2019

getClassName () возвращает String, а не Object, вы не можете привести его к EditText.

Вы не можете использовать setText AccessibilityNodeInfo, как пытаетесь сделать, вам нужно что-то вроде этот ответ .

Эквивалент Котлина:

event.source?.let {
    if (it.className == "android.widget.EditText") {
        it.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, Bundle().apply {
            putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "android")
        })
    }
}
...