4

すべてのUIをプログラムで「オンデマンド」で作成する必要があります。つまり、XMLを使用できません。これは私がしていることの擬似コードです:

View v = new MyView();
activity.setContentView(v);

tabHost = new TabHost();
....
tabHost.setup();
TabSpec tabSpec = _tabHost.newTabSpec(page);
        tabSpec.setIndicator(title);
        tabSpec.setContent((TabContentFactory) this);

activity.setContentView(tabHost);

したがって、TabContentFactoryが呼び出されると、現在のアクティビティのコンテンツビューであるビューが返されます。基本的に私がしていることは、現在のビューを取得してタブホストでラップすることです。半分は機能します。これを行うとタブバーが表示されますが、その下の黒いビューのみが表示されます。他のタブをクリックしてから戻ると、ビューが表示され、すべてが意図したとおりに機能します。
なぜ私はそれがに関連していると思うのですかsetContentView、なぜなら私がこれをするとき:

   View v = new MyView();
//    activity.setContentView(v); // we don't use it as current content view


tabHost = new TabHost();
....
tabHost.setup();
TabSpec tabSpec = _tabHost.newTabSpec(page);
        tabSpec.setIndicator(title);
        tabSpec.setContent((TabContentFactory) this);

その後、すべてが完全に機能しています。助けてくれてありがとう!

4

1 に答える 1

4

私自身の質問に答えると、何が間違っているsetContentViewのかがわかりました。呼び出されたときにビューが親にアタッチされるため、タブホストに表示されません。親からビューを削除するには、次のコードを使用できます。

ViewGroup vg = (ViewGroup)(myView.getParent());
vg.removeView(myView);
于 2010-07-07T13:54:51.850 に答える