如何在SubActivity中显示选项卡?

时间:2011-12-11 06:17:14

标签: android tabs

我创建了一个应用程序,其中我在第一个选项卡上创建了5个选项卡,有一个ListView当我点击任何ListItem时,我已经调用了另一个有意图的活动。现在我们有一个问题As&当我点击Listitem时,标签将消失,我如何在我的SubActivity上显示标签。

任何帮助都会被认可。

1 个答案:

答案 0 :(得分:0)

这是Android中的正常行为,不太好。

我通常在从这个类扩展的Tab中创建第一个Activity

public class TabActivityGroup extends ActivityGroup {
    protected LocalActivityManager manager;
    protected ArrayList<String> mIdList;

    public TabActivityGroup() {
        this(false);
    }

    public TabActivityGroup(boolean single) {
        super(single);
    }

    public void onCreate(Bundle ins) {
        super.onCreate(ins);
        manager = getLocalActivityManager();
        mIdList = new ArrayList<String>();
    }

    public void startChildActivity(String Id, Intent intent) {
        Log.d(this.getClass().getName(), "startChildActivity " + Id + " / " + mIdList.size());
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Window window = manager.startActivity(Id, intent);
        if (window != null) {
            mIdList.add(Id);
            setContentView(window.getDecorView());
        }
    }

    @Override
    public void finishFromChild(Activity child) {
        Log.d(this.getClass().getName(), "finishFromChild("+child.getClass().getName()+") mIdList.size " + mIdList.size());
        int index = mIdList.size() - 1;
        if (index < 1) {
            finish();
        }else{
            Log.e(getClass().getName(), "destroy " + mIdList.get(index));

            manager.destroyActivity(mIdList.get(index), true);
            mIdList.remove(index);
            index--;
            String lastId = mIdList.get(index);
            Activity previous = manager.getActivity(lastId);

            setContentView(previous.getWindow().getDecorView());
        }   
    }

    /**
     * Overrides the default implementation for KeyEvent.KEYCODE_BACK so that
     * all systems call onBackPressed().
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            goBack();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }


    public void goBack() {
        Log.d(this.getClass().getName(), "goBACK() : " + mIdList.size());
        int length = mIdList.size();
        if (length > 1) {
            Activity current = manager.getActivity(mIdList.get(length - 1));
            current.finish();
        }else{
            ((MyApplication)getApplication()).systemExit(this);
                    //This just calls to System.exit
        }
    }
}

然后您可以像这样创建一个标签

public class TabOne extends TabActivityGroup {

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

        startChildActivity(OneActivity.class.getName(), new Intent(this, OneActivity.class));
    }

要记住的事情:

  • 标签内部没有任何内容,只需用
    启动真正的标签活动 startChildActivity方法。这是为了获得一个好的行为 返回并进入第一个活动,应用程序需要关闭。

  • 对子活动的Context要非常小心 使用TabActivityGroup上下文。您可以通过
    手动执行此操作 调用getParent(),或者更好地定义循环调用的方法 getParent()直到找到根父母。