Android: использование ActivityGroup для включения действий

Im на этапе концептуализации/проектирования построения приложения, и я немного ударил. По сути, я искал способ вставить одну активность в пользовательский интерфейс другой, подобной тому, как TabHost/TabActivity. В верхней части экрана будет окно, которое будет содержать другое действие, а ниже это будут кнопки и элементы управления, которые не зависят от вышеуказанной активности и должны всегда быть видимыми. Пользователь сможет перемещаться из одного действия в другое в окне, не вызывая никаких изменений в элементах ниже.

Изучая проблему, я столкнулся с ActivityGroup, которая выглядела так, как будто это было бы полезно, но как бы я ее реализовал? У кого-нибудь есть опыт работы с ActivityGroup или есть другая идея?

Ответы

Ответ 1

Да, вы бы создали ActivityGroup, который будет контейнером других ваших действий. Когда пользователь нажимает на одну из кнопок, вы получаете ссылку на LocalActivityManager и используете его для запуска и встраиваете внутреннюю активность. Что-то вроде этого:

LocalActivityManager mgr = getLocalActivityManager();

Intent i = new Intent(this, SomeActivity.class);

Window w = mgr.startActivity("unique_per_activity_string", i);
View wd = w != null ? w.getDecorView() : null;

if(wd != null) {
    mSomeContainer.addView(wd);
}

Примечание. Использование этого метода может быть довольно сложным, поскольку, если фокус не прав, нажатие аппаратных кнопок (например, кнопка меню) приведет только к событиям в ActivityGroup, а не к внутренней активности. Вы должны найти способ сфокусировать внутреннюю активность после добавления ее в представление контейнера, после чего четное будет происходить во внутренней активности и распространяется на активность контейнера.

Это можно сделать, я сделал это... и он работает. Это немного сложнее, чем я думаю, это должно быть.

В любом случае, я получил большую часть этой информации, посмотрев код TabHost, который можно найти здесь