我有一个TabActivity类,它使用Intents来填充内容视图。在某些情况下,我想截取选项卡选择事件,设置一个消息对话框,禁止所选的Intent,并恢复到所选的原始选项卡。
我希望TabActivity内容保持Intent驱动(而不是使用Views)。
我怀疑这可能需要扩展LocalActivityManager。
有没有人做过这件事或做过类似事情?
// simple example of current code:
TabHost tabHost = getTabHost();
TabSpec ts = tabHost.newTabSpec(tag);
ts.setIndicator(tabview);
ts.setContent(new Intent().setClass(this, AHome.class));
tabHost.addTab(ts);
谢谢!
答案 0 :(得分:0)
我不会在TabActivity中找到答案(即使Google工作人员承认此API已被破坏)。 这就是我做的 - 在目标活动中,我会在onCreate中检查这个条件,如果条件满足,则继续,如果没有 - 激活之前的活动
答案 1 :(得分:0)
稍微深入了解Android的TabHost src后,这是一个相当简单的问题解决方案。它允许以图形方式“触摸”选项卡按钮,但仍然保持未选中状态,并且它可以阻止对所选选项卡的任何处理(假设所有OnTabSelected侦听器都已被识别)。
只需扩展TabHost类:
public class MyTabHost extends TabHost
{
public MyTabHost(Context context)
{
super(context);
}
public MyTabHost(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public void setCurrentTab(int index)
{
// e.g. substitute ? with the tab index(s) for which to perform a check.
if (index == ?)
{
if (/* a block condition exists */)
{
// Perform any pre-checking before allowing final tab selection
Toast.makeText(this.getContext(), "msg", Toast.LENGTH_SHORT).show();
return;
}
}
super.setCurrentTab(index);
}
}
然后在用于TabActivity的XML中将您的引用从 TabHost 更改为 MyTabHost :
<com.hos.MyTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:id="@+id/llTest"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp"
>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="0dp"
android:layout_gravity="top"
android:layout_weight="1"
/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="0"
/>
</LinearLayout>
</com.hos.MyTabHost>
要记住的另一件事是,如果在TabActivity中使用TabActivity.getTabHost(),它将返回MyTabHost。 e.g:
MyTabHost mth = (MyTabHost)getTabHost();