Внутренний класс Адаптер, внутренний внутренний класс - слушатель. Как получить доступ (скрыть) членов адаптера/методов от слушателя?Два двойных вложенных анонимных внутренних класса. Как получить анонимных членов класса 1-го уровня?
list.setAdapter(new Adapter() {
public View getView() {
// ...
button.setListener(new Listener() {
public void onClick() {
Adapter.this.remove(item);
}
);
}
});
Обычно для доступа внешних пользователей классов, вы просто говорите Outer.this.member, но в этом случае он дал мне следующую ошибку (используя фактический класс):
error: not an enclosing class: ArrayAdapter
Так как вы должны получить доступ к внутренним членам класса из внутреннего внутреннего класса? Мне не нравятся многоуровневые вложенные анонимные классы, но в этом случае я изучаю новый API и пока не уверен в более чистом виде. У меня уже есть обходное решение, но я хотел бы знать в любом случае. remove() на самом деле не скрывается внутри-внутренним классом, поэтому указание этого класса в этом случае действительно не требуется, но нужно четко указать код, где именно этот метод remove(). Я также хотел знать, если он затенен. Я считаю, что использование Outer.$6.remove()
будет работать, но я не верю, что так и должно быть.
Я вижу. Я думал, что будет синтаксис языка для использования, чтобы попасть в адаптер, о котором я не знал. BTW 'that' должно быть окончательным. – Chloe
Я предпочитаю этот подход, поскольку он легко читается и ясен. – skrat
Я получаю ошибку компиляции на линии Адаптер, который = Adapter.this; (Адаптер не входит в класс). Вместо этого вам лучше сказать конечный адаптер, который = это .. если вообще .. – sethu