如何在Android中的同一选项卡下打开多个视图?

时间:2012-03-02 12:36:50

标签: android tabs fragment

我想在Android的同一个标签下打开很多视图。换句话说,我有一个包含许多选项卡的标签主机。其中一个选项卡具有列表视图作为内容。单击列表项时,我希望它在同一选项卡下打开一个新视图。我做了一些谷歌研究,我发现我必须使用android片段,但我不确定这一点。您认为使用Fragment是最佳解决方案还是您有其他想法?提前谢谢。

2 个答案:

答案 0 :(得分:1)

Fragral和FragmentManager是自Honeycomb以来的推荐路径。如果您打算使用Gingerbread或更早版本的设备,则需要使用兼容性库(http://developer.android.com/sdk/compatibility-library.html)。

您会注意到ActivityGroup已被弃用。这并不意味着你现在不能使用它,但在某些时候你将被迫迁移,所以你现在也可以开始。

答案 1 :(得分:0)

将ActivityGroup类与ViewAnimator一起使用,并按ID获取正确的活动。

public class YourActivity extends ActivityGroup {

    private Stack<String> ids;
    private LocalActivityManager activityManager;
    private ViewAnimator animator;
    private int serial;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.group);
        ids = new Stack<String>();
        animator = (ViewAnimator) findViewById(R.id.animator);
        activityManager = getLocalActivityManager();
    }

    @Override
    public void startActivity(final Intent intent) {
        String id = "id" + serial++;
        ids.push(id);
        View view = activityManager.startActivity(id, intent).getDecorView();
        animator.addView(view);
        animator.setDisplayedChild(ids.size() - 1);
    }

    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            int size = ids.size();
            if (size > 0) {
                String topId = ids.pop();
                View view = activityManager.destroyActivity(topId, true).getDecorView();
                animator.removeView(view);

                if (size > 1) {
                    topId = ids.get(size - 2);
                    if (activityManager.getActivity(topId) instanceof ClassA) {
                        ((ClassA) activityManager.getActivity(topId)).onResume();
                    } else if (activityManager.getActivity(topId) instanceof ClassB) {
                        ((ClassB) activityManager.getActivity(topId)).onResume();
                    }
                    return true;
                }
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}