在 Android 的 TabHost 中隐藏选项卡
Posted
技术标签:
【中文标题】在 Android 的 TabHost 中隐藏选项卡【英文标题】:Hide a tab in the TabHost in Android 【发布时间】:2012-06-05 22:03:06 【问题描述】:if( ......)
tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
//to hide the first tab in the TabHost
这段代码有什么问题吗?当我在 onCreate() 方法中添加此代码时,应用程序崩溃.. 有什么想法吗?
我的日志猫:
05-31 22:03:38.471: E/androidRuntime(598): Caused by: java.lang.NullPointerException 05-31 22:03:38.471: E/AndroidRuntime(598): at swayam.dev.mushtouch.MushTouchActivity.setVisibilityControls(MushTouchActivity.java:75) 05-31 22:03:38.471: E/AndroidRuntime(598): at swayam.dev.mushtouch.MushTouchActivity.onCreate(MushTouchActivity.java:220) 05-31 22:03:38.471: E/AndroidRuntime(598): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 05-31 22:03:38.471: E/AndroidRuntime(598): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
也试过这个代码。还是老是崩溃。
getTabHost().getTabWidget().removeViewAt(0);
【问题讨论】:
不要太明显,但如果您有机会在主题行和标签中提及您所询问的语言或开发环境,您就会得到答案。跨度> 好吧,我已将其标记为“Android”。反正你说完我也换了话题。 你能发布堆栈跟踪吗?另外,您是否在代码中引用 TabHost ?如果不是,那是你的问题。 @wdziemia 引用 TabHost 是什么意思? tabHost = (TabHost)findViewById(android.R.id.tabhost);这个?? 05-31 22:03:38.471: E/AndroidRuntime(598): 由: java.lang.NullPointerException 05-31 22:03:38.471: E/AndroidRuntime(598): at swayam .dev.mushtouch.MushTouchActivity.setVisibilityControls(MushTouchActivity.java:75) 05-31 22:03:38.471: E/AndroidRuntime(598): at swayam.dev.mushtouch.MushTouchActivity.onCreate(MushTouchActivity.java:220) 05- 31 22:03:38.471: E/AndroidRuntime(598): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 05-31 22:03:38.471: E/AndroidRuntime(598): 在 android.app。 ActivityThread.performLaunchActivity(ActivityThread.java:1611) 【参考方案1】:我的回答会太长,所以我把它放在一个答案中。
到目前为止你已经
TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
您得到一个 NullPointerException,这意味着每当您使用该行代码时,您都在尝试更改屏幕上不存在的东西,或者可能是屏幕外的东西。
检查 R 的导入语句。
在您的包装声明下方,您应该有以下内容:
import your.package.R;
而不是
import android.R;
一旦修复,当您引用标签主机时,请使用以下内容:
TabHost tabHost = (TabHost)findViewById(R.id.tabhost);
如果这不起作用,请确保 tabhost 实际上在屏幕上,并且您不在单独的活动中。
【讨论】:
这是我的 TabHost XML 的代码。如果你想隐藏标签,你应该使用:
getChildTabViewAt() 而不是 getChildAt()
所以你的代码应该是这样的:
tabHost.getTabWidget().getChildTabViewAt(0).setVisibility(View.GONE);
【讨论】:
它对我来说很好,所以也许还有其他问题。堆栈跟踪可能会有所帮助:) 我在同一位置使用 Toast,它工作正常。但是,一旦我用这段代码替换 Toast,应用程序就会崩溃。 您是否为您的 TabHost 对象设置了任何 TabSpec? TabHost.TabSpec 规范 = getTabHost().newTabSpec("tag1"); spec.setContent(R.id.control); spec.setIndicator("控制", getResources().getDrawable(R.drawable.control)); getTabHost().addTab(spec); 非常适合我,我的标签内容扩展了 LinearLayout,我通过mTabHost.addTab(mTabHost.newTabSpec("trasy").setIndicator("Trasy", getResources().getDrawable(R.drawable.drogo)).setContent(R.id.tracklist));
添加它们以上是关于在 Android 的 TabHost 中隐藏选项卡的主要内容,如果未能解决你的问题,请参考以下文章
Android乐学成语之TabHost介绍及使用Fragment 替换 TabActivity
Android学习笔记---使用TabHost实现微信底部导航栏效果