私はタブホストを3つのタブで実装しており、機能しています。私は、同じタブをクリックするときに戻る方法があるかどうかを知りたかったのですが、リセットのような初期状態に戻りますか?クリック時のリセットタブ
各タブのメソッド "setOnClickListener"を使用してこれを行い、新しいアクティビティを取得することができましたが、アクティビティの通過に気付くので問題はありません。
おかげ
私はタブホストを3つのタブで実装しており、機能しています。私は、同じタブをクリックするときに戻る方法があるかどうかを知りたかったのですが、リセットのような初期状態に戻りますか?クリック時のリセットタブ
各タブのメソッド "setOnClickListener"を使用してこれを行い、新しいアクティビティを取得することができましたが、アクティビティの通過に気付くので問題はありません。
おかげ
は、私は1つの醜い簡単な方法と1つのより複雑な方法を持っています。
// Re-clickable (active) tabs
getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (tabHost.getCurrentTab() == 0) {
// Try this :
tabHost.setCurrentTab(1); // Ugly easy way
tabHost.setCurrentTab(0);
// Or do this :
SomeActivityGroup.group.onResume(); // More complex way
} else {
tabHost.setCurrentTab(0);
}
}
}
私は少し時間がありますが、好きな場合は後でActivityGroupコードを投稿することもできます。
**ここでは次のようになります。
import java.util.ArrayList;
import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class SomeActivityGroup extends ActivityGroup {
View rootView;
// Keep this in a static variable to make it accessible for all the nested
// activities, lets them manipulate the view
public static SomeActivityGroup group;
// Need to keep track of the history if you want the back-button to work
// properly, don't use this if your activities requires a lot of memory.
private ArrayList<View> history;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
this.history = new ArrayList<View>();
group = this;
// Start the root activity within the group and get its view
View view = getLocalActivityManager().startActivity("SomeActivity", new Intent(this, SomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
// Replace the view of this ActivityGroup
replaceView(view);
}
public void replaceView(View v) {
// Adds the old one to history
if (history.size() == 0) {
if (rootView != null) {
history.add(rootView);
rootView = null;
}
}
history.add(v);
// Changes this Groups View to the new View.
setContentView(v);
}
public void back() {
try {
if (history.size() > 0) {
history.remove(history.size() - 1);
setContentView(history.get(history.size() - 1));
} else {
finish();
}
} catch (Exception ex) {
}
}
@Override
public void onBackPressed() {
try {
SomeActivityGroup.group.back();
} catch (Exception ex) {
}
return;
}
}
だけACTIVITYGROUPSはICSでは非推奨とされていることに注意してください。
新しいアプリケーションを開発する場合、TabHostとTabActivitiesでの「古い」アプローチが廃止されたため、フラグメントと互換性ライブラリを使用することを強く推奨します。ActionBarSherlockが好ましいです。
ライブラリをダウンロードして、クラスを見てみましょう:
デモ\ABSLibraryXX \サンプル\ SRC \ COM \ actionbarsherlockサンプル\デモ\ \アプリ\ FragmentTabs.java私はあなたがどのように驚かれることでしょう保証
パワフルでシンプルです。 「アクティビティ」ではなく「フラグメント」を切り替えると、「フラグメント」状態は維持されます。つまり、アクティビティではなくビューのように動作します。
can plz explain ?? – Sumant
あなたの問題は何か、あなたが私たちに期待していることははっきりしません。あなたの問題が何であるかを簡単に説明してください。 – kosa
新しいアクティビティを作成せずにタブをクリックするとその内容が再起動されます – Kiotto