2

私は初心者の 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();
    }
} 

前もって感謝します...

4

1 に答える 1

0

createTabView() をどのように実装しますか?

createTabView(mTabHost.getContext(), "My"))

私の経験では、TabWidget が「wrap_content」に設定されていても、TabWidget がすべての画面を埋めるため、3 つのタブ コンテンツがすべて失われました。テストのために高さを「120dp」に変更した後、正しく表示されました。

欠落しているコンテンツをより正確にタブ化する方法を教えてください。親要素の背景を表示するだけですか?親要素のいずれかに特定の色を設定して、何が表示されるかを確認できます。

于 2012-10-25T13:40:53.553 に答える