如何从片段中开始活动?

时间:2012-08-22 13:48:04

标签: android android-activity fragment

我在FragmentActivity内有一组标签,每个标签都有自己的片段。当我尝试通过onClickListener并使用startActivity(myIntent)方法从该片段中开始新活动时,我的申请人关闭了。

环顾四周后,我找到了一个名为startActivityFromFragment的方法的参考或两个,但在搜索了一个小时左右后,我找不到任何解释或如何使用它的例子或这是否是我应该使用的。

我想我要问的是,从活动启动新活动与从片段启动新活动之间是否有任何区别,如果是,我需要实现什么?

5 个答案:

答案 0 :(得分:49)

您应该使用getActivity().startActivity(myIntent)

执行此操作

答案 1 :(得分:43)

我做到了,下面的代码对我有用....

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.hello_world, container, false);

        Button newPage = (Button)v.findViewById(R.id.click);
        newPage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), HomeActivity.class);
                startActivity(intent);
            }
        });
        return v;
    }

并确保您的目标活动应在Manifest.xml文件中注册,

但在我的情况下,HomeActivity中没有显示所有标签,是否有任何解决方案?

答案 2 :(得分:11)

从片段和活动开始活动之间的区别在于你如何获得上下文,因为在这两种情况下它都必须是一个活动。

来自某项活动: 上下文是当前活动(this

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

来自片段: 上下文是父活动(getActivity())。请注意,片段本身可以通过startActivity()启动活动,这不是必须从活动中完成的。

Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);

答案 3 :(得分:6)

我是这样做的,从多个活动中出现的(自定义)菜单片段启动SendFreeTextActivity:

在MenuFragment类中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);

    final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
    sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "sendFreeTextButton clicked");
            Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
            MenuFragment.this.startActivity(intent);
        }
    });
    ...

答案 4 :(得分:1)

使用片段所在的Activity的Base Context启动Intent。

Intent j = new Intent(fBaseCtx, NewactivityName.class);         
startActivity(j);

其中fBaseCtx是您当前活动的BaseContext。 您可以将其设为fBaseCtx = getBaseContext();