次の状況:私はTabActivityを持っています。 3つのタブ、TabA、TabB、TabC。
TabCのアクティビティ(Act_C_1)にボタンがあります。したがって、ユーザーがそのボタンをクリックすると、TabCで別のアクティビティ(Act_C_2)が発生するはずです。
提案やアイデアを事前に感謝します。
ムール
PD:
これが私のコードです
3つのアクティビティを持つ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));
}
}
タブのアクティビティは、次の方法で切り替えることができます。
まず、フローを理解しましょう。
タブホストには、同じタブの下にある次のアクティビティ(クリックしたアイテムの詳細など)に移動する必要があるアクティビティ(リストなど)があります。このために、アクティビティを置き換えるという概念を使用できます。また、選択したタブやその他のフラグを設定して、詳細が現在表示されていることを確認します。
押すと、同じタブの下に前のアクティビティが表示されます。このため、アクティビティを再度置き換える代わりに、選択したタブの特定のフラグを使用しながらタブを更新できます。また、詳細の表示のフラグが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);
}
バックプレスが完了すると、タブの下の各アクティビティでバックプレスをオーバーライドして、詳細画面からリストに再度移動します。
@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 ...などになります。
タブアクティビティが更新されたときに正しいリスト(アクティビティ)を再度ロードするには、タブの作成後にこれをTabWidgetonCreateに含める必要があります。
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);