首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: TabActivity,它在填充内容视图之前执行检查

Android: TabActivity,它在填充内容视图之前执行检查
EN

Stack Overflow用户
提问于 2011-02-04 09:08:09
回答 2查看 524关注 0票数 0

我有一个TabActivity类,它使用意图来填充内容视图。在某些情况下,我想截取选项卡选择事件,显示一个消息对话框,隐藏所选的意图,然后恢复到所选的原始选项卡。

我希望TabActivity内容保持意图驱动(而不是使用视图)。

我怀疑这可能需要扩展LocalActivityManager。

有没有人做到过这一点或做过类似的事情?

代码语言:javascript
复制
// 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);

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-02-04 13:48:08

我不会在TabActivity中寻找答案(甚至谷歌员工都承认这个API是错误的)。下面是我要做的--在目标活动中,我将在onCreate中检查这个条件,如果条件满足,则继续,如果不满足,则激活前一个活动

票数 0
EN

Stack Overflow用户

发布于 2011-02-05 16:27:50

在深入研究了Android的TabHost src之后,这里有一个相当简单的解决方案。它允许以图形方式“触摸”选项卡按钮,但仍然保持未选中状态,并阻止对所选选项卡的任何处理(假设所有OnTabSelected侦听器都已被感知)。

只需扩展TabHost类:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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。例如:

代码语言:javascript
复制
MyTabHost mth = (MyTabHost)getTabHost();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4893557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档