Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:TabActivity,在填充内容视图之前执行检查_Android_Android Tabhost_Tabactivity - Fatal编程技术网

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

Android:TabActivity,在填充内容视图之前执行检查,android,android-tabhost,tabactivity,Android,Android Tabhost,Tabactivity,我有一个TabActivity类,它使用意图填充内容视图。在某些情况下,我希望截获一个选项卡选择事件,弹出一个消息对话框,抑制所选的意图,并恢复到所选的原始选项卡 我希望TabActivity内容保持意图驱动,而不是使用视图 我怀疑这可能需要对LocalActivityManager进行扩展 有人完成过这件事或做过类似的事吗 // simple example of current code: TabHost tabHost = getTabHost(); TabSpec ts = tabHo

我有一个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);

谢谢

我不会在TabActivity中寻找答案,即使谷歌的工作人员承认这个API被破坏了。
下面是我要做的-在目标活动中,我会在onCreate中检查这个条件,如果条件满足,继续,如果不满足-激活之前的活动

在深入了解Android的TabHost src之后,这里有一个相当简单的问题解决方案。它允许以图形方式触摸tab按钮,但仍保持未选中状态,并防止对选定选项卡进行任何处理,前提是所有选定的侦听器都已被识别

只需扩展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内容保持意图驱动而不是使用视图-为什么?@commonware:因为我希望内容视图包含活动而不是视图。这些活动已经针对其内容进行了构建。它们本质上是MVC中的控制器。这些活动已经针对它们的内容进行了构建。它们本质上是MVC中的控制器。-MVC存在于Android发明之前。你甚至可以在维基百科上查看这些技术的日期。因此,根据定义,可以在没有活动的情况下进行MVC。你使用这些神奇的东西叫做类。相反,您将浪费堆栈空间、堆空间、CPU时间和电池寿命,这样您就可以以活动的形式组织代码。@Commonware:我很清楚MVC早于Android,而且活动比简单的自定义类更重。比如说,我希望将它们作为活动,原因有很多,例如发布它们以供在另一个应用程序的活动堆栈上使用,或者我希望在自己的堆栈上使用另一个应用程序的活动。。。但这不是重点,谢谢。请告诉我如何激活上一个活动,并重新选择上一个选项卡?
MyTabHost mth = (MyTabHost)getTabHost();