Переопределить функцию просмотра android

#android #kotlin

#Android #kotlin

Вопрос:

Я пытаюсь поддерживать ввод данных с игрового контроллера в своем приложении, я должен иметь возможность получать входные данные, находясь в фокусе любого элемента приложения. Кстати, это не игра. Я пытался следовать этому руководству из документации разработчика Android, но безрезультатно. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу переопределить функцию onKeyDown.

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

Вот какой код я пытаюсь использовать.

 class customView(context:Context) : View(context){
    override fun onKeyDown(...){
        // Code to handle keydown

    }
}
 

Я получаю сообщение об ошибке, в котором говорится что-то о том, что onKeyDown не является методом класса view (извините, в данный момент я не на своем компьютере, поэтому я не знаю точной ошибки)

В качестве еще одной заметки я также рассмотрел это о пользовательских представлениях, и я не совсем понимаю, как мне следует реализовывать ввод контроллера. Например, если бы я должен был создать новое представление, я бы предпочел переопределить что-то вроде фрагмента, который позволил бы мне вводить данные контроллера во всем приложении. Будет ли это работать лучше, переопределяя действие?

Я новичок в разработке Android и kotlin, поэтому прошу прощения, если это действительно просто.

Спасибо

Комментарии:

1. Какие параметры у вас есть, потому что он принимает параметры keyCode: Int,event: KeyEvent . developer.android.com/reference/android/view /…

2. Я использовал параметры из документации, но это все равно не работает. Возможно, я делаю что-то неправильно в ссылке на XML-файл. Пожалуйста, не мог бы кто-нибудь привести пример XML-файла, ссылающегося на представление. Будет ли это работать при прослушивании событий контроллера, даже когда фокус переключается на другие представления или нет?

3. Совет: если вы хотите что-то переопределить, нажмите Ctrl O и выберите функцию из списка. IDE заполнит скелет функции для вас правильной подписью.

Ответ №1:

Вы забыли возвращаемый тип

 class customView(context: Context) : View(context) {

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return super.onKeyDown(keyCode, event)
    }
}
 

Редактировать

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

 <package.of.my.costumview.customView   
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>
 

Комментарии:

1. Хорошо, я попробую это, когда смогу. Моя среда IDE показывает красную строку под переопределением, как будто в поле зрения нет метода onKeyDown. Пожалуйста, не могли бы вы сообщить мне, как я мог бы заставить это работать в файле XML, у меня тоже возникают трудности с этим.

2. IDE верна, нет onKeyDown метода с возвращаемым типом Void on the View class . Я не знаю, что вы подразумеваете под работой с XML-файлом, не могли бы вы объяснить это лучше?

3. О! Я вижу, чтобы добавить это представление в XML-файл, вам нужно использовать ссылку на пакет вашего пользовательского представления, я отредактирую свой ответ, чтобы лучше объяснить это

4.Я никогда не работал с контроллерами, возможно, попробуйте установить android:clickable="true" android:focusable="true" в своем пользовательском представлении

5. Ах, теперь это работает после добавления этого. Спасибо. Теперь определенно решено.