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