English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Этот пример рассказывает о использовании анонимных внутренних классов и функций обратного вызова в программировании Android. Поделюсь с вами, чтобы вы могли использовать его в качестве справки, подробности такие:
В разработке Android мы часто используем анонимные внутренние классы и их функции обратного вызова, например, когда мы устанавливаем слушатель для Button, мы обычно реализуем интерфейс OnCLickListener и перезаписываем метод Onclick(), это и есть анонимный внутренний класс и функция обратного вызова, так что как много вы понимаете о анонимных внутренних классах и функциях обратного вызова Java? Эта документация предоставляет более детальное объяснение.
Прежде всего, следует знать, что внутренний класс является основным дополнением языка Java. Внутренний класс может быть расположен почти в любом месте класса, может быть на одном уровне с переменными экземпляра, или внутри метода, даже частью выражения. Внутренние классы Java делятся на внутренние классы, локальные внутренние классы и анонимные внутренние классы, давайте рассмотрим анонимные внутренние классы.
A. О функции обратного вызова
Anonymous inner class использует функцию обратного вызова, что такое функция обратного вызова?
Термин обратный вызов означает, что клиентское приложение C вызывает функцию A в служебной программе S, а затем S в какое-то время обратно вызывает функцию B в C, для C эта B называется функцией обратного вызова. Например, функция процесса окна в Win32 - это типичный пример функции обратного вызова. Обычно C не вызывает B himself, цель предоставления B C - это чтобы S вызывал его, и это необходимо для C. Поскольку S не знает, кто такой B, предоставленный C, S соглашается с интерфейсом спецификации B (prototype функции), а затем C заранее через функцию R S информирует S о том, что он будет использовать функцию B, этот процесс называется регистрацией функции обратного вызова, R называется функцией регистрации. Web Service и RMI Java используют механизм обратного вызова, чтобы обращаться к удаленным серверным программам. Ниже приведен пример:
Программист A написал программу (программу a), в которой был оставлен интерфейс обратного вызова и программа была хорошо封装ена. Программист B хочет, чтобы a вызывал метод своей программы b, поэтому он использует интерфейс a для обратного вызова метода из b. Цель достигнута. В C/C++ для использования обратного вызова функция должна передать адрес своего указателя вызывателю, но в Java нет указателей, что делать? Мы можем реализовать определение обратного вызова через интерфейс (interface).
Предположим, что я программист A, вот моя программа a:
public class Caller { public MyCallInterface mc; public void setCallfuc(MyCallInterface mc) { this.mc= mc; {} public void call(){ this.mc.method(); {} {}
Мне нужно определить интерфейс, чтобы программист B мог написать программу, реализующую этот интерфейс, в соответствии с моими определениями.
public interface MyCallInterface { public void method(); {}
Таким образом, программист B может реализовать этот интерфейс, чтобы достичь цели обратного вызова:
public class B implements MyCallInterface { public void method() { System.out.println("回调"); {} public static void main(String args[]) { Caller call = new Caller(); call.setCallfuc(new B()); call.call(); {} {}
B. О анонимных внутренних классах
Чтобы понять, что такое внутренний класс, его функции, полиморфизм Java и что такое функциональный回调, есть множество детальных объяснений в Интернете. Для простоты sake, я просто сделал краткое объяснение. Анонимные внутренние классы передаются в качестве параметра методу, в котором используется тип интерфейса для приема переданного анонимного класса, затем вызывается его метод, что и есть полиморфизм. Принцип 其实 реализует обратный вызов, так как он вызывает метод вашего анонимного внутреннего класса. Ниже приведен код, который был написан вручную и не протестирован, только для демонстрации.
interface InterfaceA{ String go(); {} class Test(){} public void prtGo(InterfaceA ia){ System.out.println(ia.o()); {} public static void main(String []args){ Test t = new Test(); t.prtGo(new InterfaceA(){ public String go(){ return"go"; {} }); {} {}
Читатели, которые интересуются дополнительной информацией о Android, могут ознакомиться с нашими专题ами: «Введение в разработку Android и продвинутые руководства», «Советы по отладке и решения часто встречающихся проблем в Android», «Обзор技巧 по работе с мультимедийными данными (аудио, видео, запись и т.д.) в Android», «Обзор использования основных компонентов Android», «Обзор技巧 по работе с Android View View», «Обзор技巧 по работе с Android layout layout» и «Обзор использования Android View Control»
Надеюсь, что информация, изложенная в этой статье, поможет вам в разработке Android-приложений.
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, автоматически загружен и загружен, сайт не имеет права собственности, не прошел редактирование, не несет ответственности за соответствующие юридические последствия. Если вы обнаружите спорное содержание авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения и предоставления соответствующих доказательств. При обнаружении правонарушения сайт немедленно удаляет спорное содержимое.