Вложенный внутренний класс Activity в Android - PullRequest
8 голосов
/ 29 октября 2010

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

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

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% корректен, в основном псевдокод.

Ответы [ 3 ]

11 голосов
/ 23 февраля 2012

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

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

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

1 голос
/ 29 октября 2010

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

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

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

1 голос
/ 29 октября 2010

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

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

...