【问题标题】:How to use the fragment's getActivity() method to pass a context?如何使用片段的 getActivity() 方法来传递上下文?
【发布时间】:2017-04-07 07:30:40
【问题描述】:

我目前正在开发一个android应用程序,它突然给了我这些错误

避免片段中的非默认构造函数:使用默认构造函数加上 Fragment#setArguments(Bundle) 代替

这个片段应该提供一个默认构造函数(一个没有参数的公共构造函数)

这是代码:

public AFragment newInstance(int sectionNumber, Context context)
{
    AFragment fragment = new AFragment(context);
    Bundle args = new Bundle();
    args.putLong(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}

public AFragment(Context context)
{
    mContext = context;
}

如何使用片段的 getActivity() 方法来传递上下文(mContext = context)?

【问题讨论】:

  • 去掉mContext 字段,只需在Fragment 类中需要Context 的任何地方使用getActivity()。不要尝试在构造函数中传递一个。
  • 您不需要将上下文传递给片段……只需执行file -> new project 并使用默认活动/片段创建一个项目,然后看看谷歌做了什么。这很简单,会教你“正确的方法”。 ;) 永远不要在片段中使用默认空构造函数以外的构造函数。 (否则你以后会后悔的)。

标签: android


【解决方案1】:

您永远不需要将上下文传递给片段。

你可以从newInstance参数中去掉

无论您在 Fragment 中的何处使用该 Context 字段,都将其替换为 getActivity()。

如果你真的要使用某个字段,你必须在onAttach中赋值,并且记得在Fragment停止或从任何Activity分离时取消赋值

【讨论】:

    【解决方案2】:

    片段是孩子的活动或活动的一部分。因此,每当您想要片段中的上下文时,您都可以使用 getActivity() 作为上下文。

    【讨论】:

    • 如果他试图在超过 1 个活动中重复使用该片段,那不是一个选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2016-12-12
    • 2021-06-07
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多