私は初心者の Android 開発者ですが、最初のタブのコンテンツが表示されない理由がわかりません。私はかなり長い間インターネットで検索してきましたが、まだ成功していません。:(
他の 2 つのタブは正しく表示されますが、最初のタブだけが失敗します (フラグメントをアタッチしているにもかかわらず、最初のフラグメントの問題ではないと思います)。
いくつかのチュートリアルに注意深く従い、多くの例を調べようとしましたが、それでも理由がわかりません...
tabHost をセットアップする方法は次のとおりです。
private void initialiseTabHost(Bundle args) {
mTabHost = (TabHost)findViewById(R.id.main_tabhost);
mTabHost.setup();
TabInfo tabInfo = null;
TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("My").setIndicator(createTabView(mTabHost.getContext(), "My")), ( tabInfo = new TabInfo("My", MyCinemasFragment.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("All").setIndicator(createTabView(mTabHost.getContext(), "All")), ( tabInfo = new TabInfo("All", AllCinemasFragment.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
TabsFragmentActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Win!").setIndicator(createTabView(mTabHost.getContext(), "Win!")), ( tabInfo = new TabInfo("Win!", OffersFragment.class, args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
this.onTabChanged("My");
mTabHost.setOnTabChangedListener(this);
}
これは私の addTab メソッドです:
private static void addTab(TabsFragmentActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
tabSpec.setContent(activity.new TabFactory(activity));
String tag = tabSpec.getTag();
tabInfo.fragment = activity.getSupportFragmentManager().findFragmentByTag(tag);
if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.detach(tabInfo.fragment);
ft.commit();
activity.getSupportFragmentManager().executePendingTransactions();
}
tabHost.addTab(tabSpec);
}
ただし、onTabChangedがすべてを台無しにしているように感じます...
public void onTabChanged(String tag) {
TabInfo newTab = (TabInfo) this.mapTabInfo.get(tag);
if (mLastTab != newTab) {
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
if (mLastTab != null) {
if (mLastTab.fragment != null) {
ft.detach(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(this, newTab.clss.getName(), newTab.args);
ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag);
} else {
ft.attach(newTab.fragment);
}
}
mLastTab = newTab;
ft.commit();
this.getSupportFragmentManager().executePendingTransactions();
}
}
前もって感謝します...