Это нормальное поведение в Android, не очень хорошее.
Обычно я создаю первое действие на вкладке, выходящее из этого класса
public class TabActivityGroup extends ActivityGroup {
protected LocalActivityManager manager;
protected ArrayList<String> mIdList;
public TabActivityGroup() {
this(false);
}
public TabActivityGroup(boolean single) {
super(single);
}
public void onCreate(Bundle ins) {
super.onCreate(ins);
manager = getLocalActivityManager();
mIdList = new ArrayList<String>();
}
public void startChildActivity(String Id, Intent intent) {
Log.d(this.getClass().getName(), "startChildActivity " + Id + " / " + mIdList.size());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Window window = manager.startActivity(Id, intent);
if (window != null) {
mIdList.add(Id);
setContentView(window.getDecorView());
}
}
@Override
public void finishFromChild(Activity child) {
Log.d(this.getClass().getName(), "finishFromChild("+child.getClass().getName()+") mIdList.size " + mIdList.size());
int index = mIdList.size() - 1;
if (index < 1) {
finish();
}else{
Log.e(getClass().getName(), "destroy " + mIdList.get(index));
manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Activity previous = manager.getActivity(lastId);
setContentView(previous.getWindow().getDecorView());
}
}
/**
* Overrides the default implementation for KeyEvent.KEYCODE_BACK so that
* all systems call onBackPressed().
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
goBack();
return true;
}
return super.onKeyUp(keyCode, event);
}
public void goBack() {
Log.d(this.getClass().getName(), "goBACK() : " + mIdList.size());
int length = mIdList.size();
if (length > 1) {
Activity current = manager.getActivity(mIdList.get(length - 1));
current.finish();
}else{
((MyApplication)getApplication()).systemExit(this);
//This just calls to System.exit
}
}
}
Затем вы можете создать вкладку, подобную этой
public class TabOne extends TabActivityGroup {
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
startChildActivity(OneActivity.class.getName(), new Intent(this, OneActivity.class));
}
Что нужно иметь в виду:
Внутри вкладки ничего нет, просто активная вкладка начинается с
startChildActivity
метод. Это, чтобы получить хорошее поведение, когда
возвращаясь к первому действию, приложение должно закрыться.
Будьте очень осторожны с Context
в субактивности, как у вас
использовать контекст TabActivityGroup
. Вы можете сделать это вручную, набрав
вызов getParent()
, или лучше определить метод, который зацикливает вызов
getParent()
пока не найдете корневого родителя.