Проблема ошибки, возникающей из-за замены действий, может быть решена следующим образом.
Сначала Давайте разберемся в потоке:
Мы имеем вхост вкладок, действие (скажем, список), из которого нам нужно перейти к следующему действию (скажем, подробности для выбранного элемента) на той же вкладке.Для этого мы можем использовать концепцию замены действия. Также устанавливаем флаги для выбранной вкладки и другие, чтобы знать, что детали отображаются сейчас
Когда мы нажимаем назад, мы должны получитьпредыдущее действие под той же вкладкой. Для этого вместо того, чтобы снова заменить действие, мы можем обновить вкладку, используя определенный флаг для вкладки, который был выбран.Кроме того, если флаг для отображения подробностей установлен в true, мы перейдем к списку на той же вкладке, иначе мы перейдем к активности перед вкладкой (обычное использование onBackPressed)
Код можетбыть следующим: ..
- Для перехода от списка к деталям ...
(Это может быть в onClickListener)
private OnClickListener textListener = new OnClickListener() {
@Override
public void onClick(View v) {
Constants.SHOW_DETAILS = true;
Intent intent = new Intent(context, DetailsActivity.class);
replaceContentView("activity3", intent);
}
};
public void replaceContentView(String id, Intent newIntent) {
View view = ((ActivityGroup) context)
.getLocalActivityManager()
.startActivity(id,
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
((Activity) context).setContentView(view);
}
Когда нажата обратная связь, мы перезаписываем на BackPressed в каждом действии на вкладке, чтобы снова перейти к списку с экрана сведений
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
if (MathHelper.SHOW_DETAILS) {
Log.e("back", "pressed accepted");
Constants.LIST_ACTIVITY = 1;
Constants.SHOW_DETAILS = false;
Intent intent = new Intent(this, Tab_widget.class);
startActivity(intent);
finish();
}
}
Наиболее важныечасть здесь Constants.LIST_ACTIVITY = 1;он указывает, в какой вкладке мы находимся. Значит, соответствующие действия будут иметь значение 0,1,2 ... и т. д.
Снова, чтобы загрузить правильный список (Activty) при обновлении активности вкладки, мы должнывключить это в TabWidget onCreate после создания вкладок
tabHost.setCurrentTab(Constants.LIST_ACTIVITY);