Android. Как изменить активность в одной вкладке
Следующая ситуация:
У меня есть TabActivity, например. три вкладки, TabA, TabB, TabC.
В действии (Act_C_1) TabC есть кнопка. Поэтому, если пользователь нажимает на эту кнопку, в TabC должно появиться другое действие (Act_C_2).
Я благодарю вас за любые предложения/идеи.
Мур
UPD:
Вот мой код
TabActivity с тремя действиями:
public class TabScreen extends TabActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_menu);
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
intent = new Intent().setClass(this, SecondActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, ThirdActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, FourthActivity.class);
spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent);
tabHost.addTab(spec);
}
}
Действие 'Act_C_1' или FourthActivity.java:
public class FourthActivity extends Activity implements OnClickListener
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fourth);
Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter);
BtnWeiter.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// I also tried to use LocalActivityManager
// TabActivity parentTabActivity = (TabActivity) getParent();
// LocalActivityManager manager = parentTabActivity.getLocalActivityManager();
// manager.destroyActivity("tab_3", true);
// manager.startActivity("tab_3", new Intent(this, FourthActivity.class));
finish();
startActivity(new Intent(this, FourthActivity.class));
}
}
Ответы
Ответ 1
Действия на вкладке можно переключать следующим образом.
Сначала Поясним поток:
-
У нас есть в хосте Tab, активность (скажем, список), из которого нам нужно перейти к следующему действию (например, детали для щелкнутого элемента) на той же вкладке. Для этого мы можем использовать концепцию замены активности. Также установите флажки для выбранной вкладки и другие, зная, что теперь отображаются данные.
-
Когда мы возвращаемся назад, мы должны получить предыдущее действие под одной и той же вкладкой. Для этого вместо повторной замены активности мы можем обновить вкладку, используя выбранный флажок для выбранной вкладки. Также, если флаг для сведений о показах истинен, мы перейдем к списку на той же вкладке, иначе мы перейдем к активности перед tabwidget (обычное использование 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 в каждом из Activity под вкладкой, чтобы снова перейти к списку из экрана сведений
@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();
}
}
Самая важная часть здесь
Константы .LIST_ACTIVITY = 1; он указывает, на какой вкладке мы находимся. поэтому соответствующие действия будут иметь значение 0,1,2... и т.д.
Снова, чтобы загрузить правильный список (Activty), когда активность вкладки обновлена, мы должны включить это в TabWidget onCreate после создания вкладок
tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
Ответ 2
Просто используйте флаг Intent.FLAG_ACTIVITY_CLEAR_TOP, чтобы заменить действие для необходимой вкладки.
intent = new Intent().setClass(this, YourActivity.class);
spec = tabHost.newTabSpec("tab1").setIndicator("Tab1",null)
.setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);
Ответ 3
Просто добавьте это для всех вкладок:
yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
getTabHost().setCurrentTab(0);
}
});
Ответ 4
Обработать событие onClick для кнопки
завершить() действие
Добавьте метод startActivity для запуска другого действия.
Спасибо