画面下部に4つのタブがあるアプリケーションを作成しようとしています。
それらすべてにアクティビティ(インテント)が含まれています。
そして、アクティビティのいずれかを別のアクティビティにナビゲートしたいと思います。ただし、TabWidgetを表示したままにしておきます。
あなたがそれについて知っているならば、私にできるだけ早く知らせてください。
恥ずかしがり屋
画面下部に4つのタブがあるアプリケーションを作成しようとしています。
それらすべてにアクティビティ(インテント)が含まれています。
そして、アクティビティのいずれかを別のアクティビティにナビゲートしたいと思います。ただし、TabWidgetを表示したままにしておきます。
あなたがそれについて知っているならば、私にできるだけ早く知らせてください。
恥ずかしがり屋
アクティビティの差し替えでエラーが発生する問題は、以下の方法で解決できます。
まず、流れを理解しましょう。
同じタブの下の次のアクティビティ (クリックされたアイテムの詳細など) に移動する必要があるタブ ホスト アクティビティ (リストなど) があります。このために、アクティビティを置き換えるという概念を使用できます。また、選択したタブのフラグを設定し、詳細が現在表示されていることを知るためにその他のフラグを設定します
戻ると、同じタブの下にある前のアクティビティを取得する必要があります。このため、アクティビティを再度置き換える代わりに、選択されたタブの特定のフラグを使用してタブを更新できます。また、show details のフラグが true の場合は、同じタブのリストに移動します。それ以外の場合は、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 をオーバーライドして、詳細画面から再びリストに移動します。
@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);
これは、単一のタブに複数のアクティビティがあるタブに実装されます。
ただし、アクティビティが複数回呼び出されると、StackOverFlowエラーが発生します。大変な努力をしましたが、解決できませんでした。誰かがこの問題を解決する方法を教えてください
また、タブ内のアクティビティを置き換える必要がありますが、子アクティビティからです。それはどのように行われるのですか?
いつでも、アクティビティは1つだけである可能性があります。これに関するドキュメントはこちら