Следующая ситуация: у меня есть TabActivity, например, три вкладки, TabA, TabB, TabC.
Есть кнопка в действии (Act_C_1) TabC. Поэтому, если пользователь нажимает на эту кнопку, в TabC должно появиться другое действие (Act_C_2).
Я заранее благодарю вас за любые предложения или идеи.
Mur
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)); } }
Действия на вкладке можно переключать следующим образом.
Сначала давайте понять поток:
У нас есть вкладка «Хост», активность (скажем, список), из которой нам нужно перейти к следующему действию (например, детали для щелкнутого элемента) на той же вкладке. Для этого мы можем использовать концепцию замены активности. Также устанавливаем флажки для выбранной вкладки и другие, зная, что детали отображаются сейчас
Когда мы нажимаем назад, мы должны получить предыдущее действие под одной и той же вкладкой. Для этого вместо повторной замены активности мы можем обновить вкладку, используя выбранный флажок для выбранной вкладки. Кроме того, если флаг для сведений о показах истинен, мы перейдем к списку на той же вкладке, иначе мы перейдем к активности перед 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(); } }
Самая важная часть здесь – Constants.LIST_ACTIVITY = 1; Он указывает, на какой вкладке мы находимся. Поэтому соответствующие действия будут иметь значение 0,1,2 … и т. Д.
Снова, чтобы загрузить правильный список (Activty), когда активность вкладки обновлена, мы должны включить это в TabWidget onCreate после создания вкладок
tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
Просто используйте флаг 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);
Просто добавьте это для всех вкладок:
yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() { public void onClick(View v) { getTabHost().setCurrentTab(0); } });
Обрабатывать событие onClick для кнопки
Finish (). Добавьте метод startActivity, чтобы начать другое действие.
благодаря