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

时间:2012-04-05 08:31:54

标签: android android-tabhost

我的示例应用程序中有3个选项卡,包含活动组。第一个选项卡包含搜索活动,即主/根活动,并在另一个活动中显示搜索结果,但在同一个选项卡下,即Tab1。当我在结果活动中按回按钮时,它将搜索活动。一切都很好,直到这里。现在我想通过按Tab1而不是按后退按钮来进行搜索活动。怎么能实现这个?我试过这样的事情

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

    }
}

任何人都可以帮助告诉我如何在按下标签时调用搜索活动?部分会怎样?因为如果我使用tabHost.setCurrentTab(index),它将显示结果活动但不显示搜索活动。

注意:我按照本link中给出的教程。

3 个答案:

答案 0 :(得分:0)

我并非100%确定我完全了解你,但让我们看看:)。

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

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

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在设备上工作的东西,因此可能有一种更容易和更多的方法来完成它,但这适用于几乎所有设备:)

这是另一个使用类似方法的线程: Launching activities within a tab in Android

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

答案 1 :(得分:0)

我认为你想要做的是:当选择'tab1'标签时,如果(并且仅当)当前活动不是那个活动时返回到TabGroup1Activity(基本上你想要模拟'后'压力)。

如果是这样,你想要的是:

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

答案 2 :(得分:0)

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

相关问题