8

Объявляет класс, который расширяет действие внутри другого класса деятельности? Если это так, как бы я зарегистрировал этот класс в манифесте? Кроме того, это то, что может быть разумно сделано или это плохая идея?Вложенный внутренний класс активности в android

Я думал о чем-то вроде

class ListClass extends ListActivity{ 

    ... 
    ArrayList items; 

    class ItemClass extends Activity{ 

     ... 
     Item item; 

     @Override 
     onCreate(){ 
      Integer pos = getIntent().getExtras().getInt("pos"); 
      item = items.get(pos); 
     } 
    } 

    @Override 
    onItemClick(int position){ 

     startActivity(new Intent(this, ItemClass.class).putExtra("pos", position)); 

    } 
} 

Обратите внимание на синтаксис не 100% правильно, очевидно, в основном псевдокод.

+0

Зачем вам это нужно? – EboMike

+1

Я пытаюсь придумать лучший способ предоставить доступ к ItemClass объектам в моих элементах ArrayList без посреднической службы. – Falmarri

+3

Имейте в виду, что действия могут быть уничтожены в любое время (есть возможность отладки, чтобы это произошло). Любое предыдущее действие может быть уничтожено в любое время. Вы не можете полагаться на предыдущие действия. Либо передавать данные через намерение, либо через поставщика контента, либо через общие настройки. – EboMike

ответ

1

Нет, это невозможно. В конце концов, операционной системе Android потребуется создать экземпляр Activity, если он запущен в любой момент (например, если вы запустите его с намерением), и невозможно создать экземпляр ItemClass без родителя ListClass.

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

+2

это неправильно. Вы можете это сделать полностью. См. Ответ Дастина ниже. – whoabackoff

+4

@whoabackoff - Как внутренний класс STATIC, конечно, но это не было задано - таким образом вы не сможете получить доступ к «элементам», что конкретно задает OP. – EboMike

1

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

Однако я не вижу причин, почему это не сработает. Не могли бы вы ссылаться на него в AndroidManifest, как обычно, если оба класса являются общедоступными? т. е. com.falmarri.ListClass.ItemClass?

Редактировать: Не важно, это не работает, как указал EboMike.

+0

Как бы операционная система создавала экземпляр ItemClass без ListClass? Это не статический класс. – EboMike

+0

Правильно, и тогда он не сможет получить доступ к переменным экземпляра ListClass, поэтому он хотел сделать это в первую очередь, поэтому он побеждает цель. Оказывается, это не работает для статических классов. –

10

Да, это действительно работает - это просто еще один класс - вам просто нужно объявить вашу деятельность, используя внутреннее обозначение класса в AndroidManifest.xml:.

< деятельности андроид: имя =»ListClass $ ItemClass "/ >

Кажется, все в порядке для меня, но, возможно, когда этот вопрос был задан, он не поддерживался в старых версиях Android?

Не уверен, ПОЧЕМУ вы хотите это сделать, но можете.

+0

это работает для меня, используя статические внутренние классы. – whoabackoff

+0

@Dustin Возможно, вы захотите инкапсулировать действие в CustomView, если оно используется только для каждого конкретного вида –

+1

Внутренний класс должен быть статическим! – Ali