2

我的示例应用程序中有 3 个选项卡和活动组。第一个选项卡包含搜索活动,即 Home/Root 活动,并在另一个活动中显示搜索结果,但在同一选项卡下,即 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),它将显示结果活动而不是搜索活动。

注意:我按照此链接中给出的教程进行操作。

4

3 回答 3

0

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

于 2012-04-19T07:08:58.753 回答
0

I think what you want to do is this: when the 'tab1' tag is selected, go back to TabGroup1Activity if (and only if) the current activity is not that activity (basically you want to simulate a 'back' press).

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

if (getCurrentActivity().getClass() != TabGroup1Activity.class) 
    getCurrentActivity().finish()
于 2012-04-12T10:03:37.427 回答
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);
    }
}

我刚刚查看了我的代码,并认为这里还有更多需要解释的地方。问题是您没有像往常一样堆叠活动。相反,解决方法是制作内容堆栈并更改这些内容。所以我所做的是创建一个扩展 ButtonHandlerActivityGroup 的类 StartGroup:

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 的设备上工作的东西,所以可能有一种更简单和更 androidish 的方式来完成它,但这几乎适用于所有设备:)

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

让我知道我是否可以提供更多帮助。

于 2012-04-12T09:54:34.500 回答