Tabhost和子界面activity之間的控件相互操作


本標題的含義是,解決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).……

(完)~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM