Tabhostとサブインタフェースactivity間のコントロール相互運用

5448 ワード

このタイトルの意味は、Tabhost自体とサブTabのactivity間のコントロール呼び出しの問題を解決することです.例えば、サブTabがこのactivityでmenuキーを押して、親Tabhostの下部menuを隠すことを望んでいる場合、どのように実現しますか?
急にこの問題を解決するには決して焦らないでください.私の菜鳥は一枚です.
以下は私の例と解決方法です.
下部のmenuはradiogroupで構成されています.
1、Tabhostでonkeydownを設定し、radiogroupを設定し、試験に失敗した.
2、同様にTabhostにtabHostを設定.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener()…同じくダメです.
なぜなら、サブtabであなたのボタン操作が直接サブtab自体を指しているからです.
これで終わりだ,二つの独立したものがどうして互いに呼び出されるのか.私は子TabにToast--Toastと書いてみました.makeText(StartActivity.this, this.getParent().getClass().toString(), Toast.LENGTH_SHORT).show();
見つけたのは「tabtest」(私のTabhostクラス名)です.問題解決の鍵はここにある.
親が見つかった以上、親はradiogroupを直接操作できます.親クラスのradiogroupをgetとsetメソッドで露出すれば設定できます.
親Tabhostのコードは次のとおりです.
 1     private boolean groupvisible;//groupvisible 

 2     private RadioGroup group;//group 

 3 

 4     /**

 5      *  

 6      * @return

 7      */

 8     public boolean getgroupisvisible(){

 9         return this.groupvisible;

10     }

11     

12     /**

13      *  

14      * @param visible

15      */

16     public void setgroupvisible(boolean visible){

17         groupvisible=visible;

18         if(visible){

19             group.setVisibility(View.VISIBLE);

20         }else{

21             group.setVisibility(View.GONE);

22         }

23     }

24     

サブtabのactivityの関連コードは次のとおりです.
 1     @Override

 2     public boolean onKeyDown(int keyCode, KeyEvent event) {

 3         if(keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0){

 4             boolean groupvisible= ((TabTest)this.getParent()).getgroupisvisible();//   5             ((TabTest)this.getParent()).setgroupvisible(!groupvisible);//   6         }else{

 7             

 8         }

 9         return true;

10     }

コードが書き終わり、効果が実現します.もちろんTabhostでradiogroupの非表示と表示にダイナミック効果を追加し、より人間的にすることもできます.
必要な同僚に参考にしてください.
 
tabhostでサブtabのコントロールを操作する方法については、tabHostを使用してヒントを与えます.getTabWidget().getChildAt(0).……
(完)~