gpt4 book ai didi

Android Fragments getView 返回 View 的父级?

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:30 28 4
gpt4 key购买 nike

所以当涉及到 fragment 类中的 getVIew() 方法时,我遇到了一些奇怪的行为。从文档中,我希望获得在 onCreateView 方法中创建的 View ,如此处所述 http://developer.android.com/reference/android/app/Fragment.html#getView()

“获取 fragment 布局的 Root View (由 onCreateView(LayoutInflater, ViewGroup, Bundle) 返回的 View )”

现在,我有一个 View ,其中有相当多的子项,所以我想在尝试“findViewById”时尝试保存,方法是实现一个 ViewHolder 类,类似于我在 ListView Adapters 中完成的常用方法设置为从 onCreateView 返回的 View 的标签。

稍后当我调用 getView 方法时会出现奇怪的行为。看起来该 fragment 正在返回我创建的 View 的父 View ,而不是我创建的 View ,这导致返回空标记。

我编写了少量代码来打印 View (如果 View 实际上是一个 viewGroup,则嵌套 subview ),这就是我得到的结果。

 android.widget.ScrollView  android.widget.ScrollView@4242dec0
/android.widget.ScrollView

当我稍后使用 getView() 方法打印它时,我得到了

 android.support.v4.app.NoSaveStateFrameLayout
android.widget.ScrollView android.widget.ScrollView@4242dec0
/android.widget.ScrollView
/android.support.v4.app.NoSaveStateFrameLayout

如您所见,ScrollView 是我在 onCreateView 方法中实际创建的 View 。那么为什么 getView 返回的是父 View 而不是 View 呢?

最佳答案

支持库将一个额外的 View 插入到 View 层次结构中。根据 NoSaveStateFrameLayout.java 中的评论:“该平台的 Honeycomb 之前的版本没有 View.setSaveFromParentEnabled(),因此我们将其插入到 View 与其父 View 之间。”

所以你需要用类似的东西来检查这个:

View myView = (NoSaveStateFrameLayout)getView();
if (myView != null) {
myView = myView.getChildAt(0);
}

或者在实例变量中跟踪 onCreateView 返回的 View 。

关于Android Fragments getView 返回 View 的父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244042/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com