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).……

(完)~

转载于:https://www.cnblogs.com/winxiang/archive/2012/10/13/2722508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值