Android 单击选项卡不显示主页活动

Android 单击选项卡不显示主页活动,android,android-tabhost,Android,Android Tabhost,我的示例应用程序中有3个选项卡,其中包含“活动”组。第一个选项卡包含搜索活动,即Home/Root活动,我在另一个活动中显示搜索结果,但在同一选项卡下,即Tab1。当我在结果活动中按下后退按钮时,它将搜索活动。在这之前一切都很顺利。现在我想通过按tab1而不是按back按钮来进行搜索活动。如何才能做到这一点?我试过这样的东西 public class TabSample extends TabActivity { public TabHost tabHost; @Overri

我的示例应用程序中有3个选项卡,其中包含“活动”组。第一个选项卡包含搜索活动,即Home/Root活动,我在另一个活动中显示搜索结果,但在同一选项卡下,即Tab1。当我在结果活动中按下后退按钮时,它将搜索活动。在这之前一切都很顺利。现在我想通过按tab1而不是按back按钮来进行搜索活动。如何才能做到这一点?我试过这样的东西

public class TabSample extends TabActivity {

    public TabHost tabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        this.tabHost = getTabHost();

        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("OPT")
                .setContent(new Intent(this, TabGroup1Activity.class)));

        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("EDIT")
                .setContent(new Intent(this, TabGroup2Activity.class)));

        tabHost.setCurrentTab(1);

        tabHost.setOnTabChangedListener(new OnTabChangeListener() {

            public void onTabChanged(String arg0) {

                if (tabHost.getCurrentTabTag().equals("tab1")) {
                         //What should I do to display search activity here
                } else {
                    tabHost.setCurrentTab(1);
                }

            }
        });

        tabHost.setFocusable(true);
        tabHost.requestFocus();

    }
}
有人能告诉我在按下tab键时如何调用搜索活动吗?如果是部分,将进入什么?因为如果我使用tabHost.setCurrentTabindex,它将显示结果活动,但不显示搜索活动


注意:我遵循了本文给出的教程。

我不能100%肯定我完全理解您,但让我们看看:

在onTabChanged侦听器中,您可以切换已设置选项卡的选项卡,然后在activitygroup中正常打开活动:

public void onTabChanged(String tabId) {
    if (tabId.contentEquals("tab1")) {
        Intent intent = new Intent(tabHost.getContext(), TabGroup1Activity.class);
        View view = StartGroup.group.getLocalActivityManager().startActivity("tab1", intent).getDecorView();
        StartGroup.group.setContentView(view);
    }
}
我只是回顾了我的代码,认为这里还有更多的解释。问题是你没有像平常一样堆叠活动。相反,解决方法是制作一个内容堆栈,并对其进行更改。所以我所做的是创建一个类StartGroup,它扩展了 按钮HandlerActivityGroup:

public class StartGroup extends ButtonHandlerActivityGroup {
// Keep this in a static variable to make it accessible for all the nested  activities, lets them manipulate the view
public static StartGroup group;

// Need to keep track of the history if you want the back-button to work properly, 
// don't use this if your activities requires a lot of memory.  
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);

    this.history = new ArrayList<View>();
    group = this;

    // Start the root activity within the group and get its view
    View view = getLocalActivityManager().startActivity("UserList", new Intent(this, UserList.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();

    replaceView(view);
}
public void back() {
    if (history.size() > 0) {
        // pop the last view
        history.remove(history.size()-1);
        setContentView(history.get(history.size()-1));
    } else {
        finish();
    }
}
}
然后从TabMaster类或您所称的类中,可以使用StartGroup类更改活动组的内容视图

这是我在2.2版的设备上写的东西,因此可能有一种更简单、更雄伟的方法来完成它,但这几乎适用于所有设备:

下面是另一个线程,用户可以使用类似的方法:


如果我能提供更多帮助,请告诉我。

我不能100%确定我完全理解您,但让我看看:

在onTabChanged侦听器中,您可以切换已设置选项卡的选项卡,然后在activitygroup中正常打开活动:

public void onTabChanged(String tabId) {
    if (tabId.contentEquals("tab1")) {
        Intent intent = new Intent(tabHost.getContext(), TabGroup1Activity.class);
        View view = StartGroup.group.getLocalActivityManager().startActivity("tab1", intent).getDecorView();
        StartGroup.group.setContentView(view);
    }
}
我只是回顾了我的代码,认为这里还有更多的解释。问题是你没有像平常一样堆叠活动。相反,解决方法是制作一个内容堆栈,并对其进行更改。所以我所做的是创建一个类StartGroup,它扩展了 按钮HandlerActivityGroup:

public class StartGroup extends ButtonHandlerActivityGroup {
// Keep this in a static variable to make it accessible for all the nested  activities, lets them manipulate the view
public static StartGroup group;

// Need to keep track of the history if you want the back-button to work properly, 
// don't use this if your activities requires a lot of memory.  
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);

    this.history = new ArrayList<View>();
    group = this;

    // Start the root activity within the group and get its view
    View view = getLocalActivityManager().startActivity("UserList", new Intent(this, UserList.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();

    replaceView(view);
}
public void back() {
    if (history.size() > 0) {
        // pop the last view
        history.remove(history.size()-1);
        setContentView(history.get(history.size()-1));
    } else {
        finish();
    }
}
}
然后从TabMaster类或您所称的类中,可以使用StartGroup类更改活动组的内容视图

这是我在2.2版的设备上写的东西,因此可能有一种更简单、更雄伟的方法来完成它,但这几乎适用于所有设备:

下面是另一个线程,用户可以使用类似的方法:


如果我能提供更多帮助,请告诉我。

我认为您要做的是:选择“tab1”标记后,如果且仅当当前活动不是您希望模拟“后退”按键的活动时,请返回到TabGroup1活动

如果是这样,您需要的是:

if (getCurrentActivity().getClass() != TabGroup1Activity.class) 
    getCurrentActivity().finish()

我认为您要做的是:选择“tab1”标记后,如果且仅当当前活动不是您希望模拟“后退”按键的活动时,返回到TabGroup1活动

如果是这样,您需要的是:

if (getCurrentActivity().getClass() != TabGroup1Activity.class) 
    getCurrentActivity().finish()

ActivityGroup中有一个ArrayList,因此重写ActivityGroup中的onPause方法并从ArrayList中删除所有ID,但第一个ID必须是SearchActivity。
因此,当您转到其他选项卡,然后返回SearchActivity或在选项卡1上,将显示Home。

您的ActivityGroup中有一个ArrayList,因此请覆盖ActivityGroup中的onPause方法,并从ArrayList中删除所有ID,但第一个ID必须是您的SearchActivity。
因此,当您转到其他选项卡,然后返回到SearchActivity或在选项卡1上,将显示Home。

您是否尝试过movetasktobacktrue?更新了我的答案,以作进一步解释。可能值得查看片段而不是使用此方法,以备将来验证。不推荐使用FragmentActivity。请参见示例。您是否尝试过movetasktobacktrue?更新了我的答案,以作进一步解释。为了将来的验证,可能值得研究片段而不是使用此方法。不推荐使用FragmentActivity。举个例子,让我试试。谢谢顺便说一句,请让我知道,问题的哪一部分你不能理解。这样我就可以修改这个问题了。我想这最终会在搜索结果顶部启动一个新的搜索界面副本,所以如果你按back,你将返回到以前的搜索结果,然后再返回到原始搜索表单。这可能行得通,但从您的描述来看,我认为您正在寻找的是我发布的内容。当您切换contentView时,您如何获得副本?因为您正在启动一个新活动,但将旧活动保留在其下方的活动堆栈中。内容视图与活动不同,ActivityGroup仍在后台管理这两个活动对象。是的,我启动一个活动以获取decorview,但正如您所看到的,我
因此,使用intent标志清除StartGroup类中的top。所以你说的不对,让我试试。谢谢顺便说一句,请让我知道,问题的哪一部分你不能理解。这样我就可以修改这个问题了。我想这最终会在搜索结果顶部启动一个新的搜索界面副本,所以如果你按back,你将返回到以前的搜索结果,然后再返回到原始搜索表单。这可能行得通,但从您的描述来看,我认为您正在寻找的是我发布的内容。当您切换contentView时,您如何获得副本?因为您正在启动一个新活动,但将旧活动保留在其下方的活动堆栈中。内容视图与活动不同,ActivityGroup仍在后台管理这两个活动对象。是的,我启动一个活动以获取decorview,但正如您所看到的,我还使用intent标志清除StartGroup类中的顶部。所以你说的不对。我尝试了你的代码,把它加入到我的代码中。但它不起作用。无论如何,谢谢。我尝试了你的代码,把它添加到我的代码中。但它不起作用。无论如何,谢谢。