Передайте в объект класс Java, встроенный в качестве параметра - PullRequest
4 голосов
/ 19 апреля 2010

Я создаю приложение для Android, которое имеет вид списка, а в виде списка - прослушиватель щелчков, содержащий метод onItemClick. Итак, у меня есть что-то вроде этого:

public class myList extends ListActivity {
    @Override
public void onCreate(Bundle savedInstanceState) {
        getListView().setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
            /* Do something*/
        }
    }
}

Обычно это работает нормально. Тем не менее, часто мне приходится слишком преформовать приложение, использующее внешний класс в качестве контекста. Таким образом, я использовал:

parent.getContext();

чтобы сделать это, но я хотел бы знать, это плохая идея? Я не могу позвонить:

super

потому что это на самом деле не подкласс, а только встроенный. Так есть ли лучший способ, или это считается уютом? Кроме того, если это правильный путь, что мне делать, если встроенный метод не имеет параметра для получения внешнего класса?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Если я правильно понимаю ваш вопрос, вы хотите вызвать внешний класс изнутри анонимного внутреннего класса, верно? Для этого используйте следующий синтаксис:

myList.this.getContext();

из onItemClick метода анонимного внутреннего класса. Это специальный синтаксис, определенный для внутреннего класса для доступа к экземпляру внешнего класса, который его содержит.

2 голосов
/ 19 апреля 2010

Внутри анонимного внутреннего класса вы можете получить дескриптор внешнего класса с EnclosingClass.this. Для информации см. здесь . Если коротко, то вы можете использовать myList.this.getContext () в вашей функции onItemClick ().

...