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

发布于 2024-10-15 12:14:56 字数 447 浏览 2 评论 0原文

我有一个 TabActivity 类,它使用意图来填充内容视图。在某些情况下,我想拦截选项卡选择事件,弹出消息对话框,抑制所选的意图,并恢复到所选的原始选项卡。

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

我怀疑这可能需要扩展 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);

谢谢!

I have a TabActivity class which uses Intents to populate the content view. Under certain conditions, I would like to intercept a tab selection event, put up a message dialog, suppress the selected Intent, and revert to the original tab selected.

I want the TabActivity content to remain Intent driven (rather than using Views).

I suspect this may require extension of the LocalActivityManager.

Has anyone ever accomplished this or done a similiar thing?

// 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);

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绾颜 2024-10-22 12:14:56

我不会在 TabActivity 中寻找答案(甚至 Google 员工也承认这个 API 已损坏)。
这就是我所做的 - 在目标活动中,我会在 onCreate 中检查此条件,如果满足条件,则继续,如果不满足 - 激活前一个活动

I wouldn't look in the TabActivity for the answer (even Google staff admit that this API is broken).
Here's what I do - in the target activity, I'd check this condition in the onCreate, if the condition is satisfied, continue, if no - activate the previous activity

夜深人未静 2024-10-22 12:14:56

在深入研究 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.getTabHost ()在TabActivity中,它会返回一个MyTabHost。例如:

MyTabHost mth = (MyTabHost)getTabHost();

After a little digging into Android's TabHost src, here's a fairly simple solution to the problem. It allows the tab button to be "touched" graphically yet still remain unselected and it prevents any processing of the selected tab (assuming that all the OnTabSelected listeners have been made aware).

Just Extend the TabHost class:

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);
    }
}

And then change your reference from TabHost to MyTabHost in the XML used for the TabActivity:

<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>

One other thing to remember is that if you use TabActivity.getTabHost() in the TabActivity, it will return a MyTabHost. e.g.:

MyTabHost mth = (MyTabHost)getTabHost();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文