如何从片段中开始活动?

54 android fragment android-activity

我有一组标签FragmentActivity,每个标签都有自己的片段.当我尝试通过一个onClickListener和使用该startActivity(myIntent)方法从该片段中启动一个新活动时,我的应用程序强制关闭.

环顾四周后,我找到了一个或两个被称为方法的参考startActivityFromFragment,但在搜索了大约一个小时之后,我找不到任何解释或如何使用它的例子,或者这是我应该使用的.

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

EkK*_*KoZ 50

你应该这样做 getActivity().startActivity(myIntent)

  • @EkKoZ:这不是必需的.`Fragment`的`startActivity(Intent intent)`方法有效地做了同样的事情. (7认同)

Jay*_*esh 45

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

@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;
    }
Run Code Online (Sandbox Code Playgroud)

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

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


Dav*_*tal 11

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

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

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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

Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)


fad*_*bee 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);
        }
    });
    ...
Run Code Online (Sandbox Code Playgroud)