首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么片段类应该是公开的?

为什么片段类应该是公开的?
EN

Stack Overflow用户
提问于 2018-07-16 10:14:39
回答 2查看 709关注 0票数 4

我找到了一些线程来解释为什么Fragment类应该像那样是static (而不是非静态内部的)。但无法理解此错误消息的原因:

这个片段类应该是公共的(.)

我使用Android 3.1.2,这是我代码的一部分:

代码语言:javascript
运行
复制
public class MainActivity extends android.support.v7.app.AppCompatActivity {
    // ...
}

class DefaultFragment extends android.support.v4.app.Fragment {
    // ...
}

该片段应该仅用于MainActivity

编辑: IDE消息中还有其他一些信息。但关于建设者:

从片段文档中: 每个片段都必须有一个空的构造函数,因此可以在恢复其活动状态时实例化它。强烈建议子类没有带有参数的其他构造函数,因为当片段被重新实例化时不会调用这些构造函数;相反,参数可以由带有setArguments(Bundle)的调用方提供,然后由片段用getArguments()检索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-16 10:36:03

在改变方向时,重新创建的活动和框架在片段上创建新的实例(并恢复以前的状态)。因此,为了创建片段的实例,框架要求提供公共构造器。

来自Fragment.Fragment()的文档

Default constructor :

每个片段都必须有一个empty constructor,因此可以在恢复其活动状态时实例化它。强烈建议子类没有带有参数的其他构造函数,因为当片段被重新实例化时不会调用这些构造函数;相反,参数可以由调用方使用setArguments(Bundle)提供,然后由FragmentgetArguments()检索。

下面是代码表单Activity.java类,您可以在查找更多FragmentManager.dispatchMoveToState()代码时进一步分析

代码语言:javascript
运行
复制
@MainThread
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
    ........
    if (savedInstanceState != null) {
        mAutoFillResetNeeded = savedInstanceState.getBoolean(AUTOFILL_RESET_NEEDED, false);
        mLastAutofillId = savedInstanceState.getInt(LAST_AUTOFILL_ID,
                View.LAST_APP_AUTOFILL_ID);
        if (mAutoFillResetNeeded) {
            getAutofillManager().onCreate(savedInstanceState);
        }
        Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
        mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
                ? mLastNonConfigurationInstances.fragments : null);
    }
    mFragments.dispatchCreate();
    .....
}
票数 2
EN

Stack Overflow用户

发布于 2019-03-25 14:52:18

这也是因为内部类包含对其父类的引用,这可能会泄漏活动。

非静态内部类确实包含对其父类的引用。使片段内部类非静态的问题是,始终保持对活动的引用。GarbageCollector无法收集您的活动。因此,您可以‘泄漏’的活动,例如,方向改变。因为片段可能仍然存在,并被插入到新的活动中。

检查详细答复并尝试制作片段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51359472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档