Android 是否返回视图的父视图?
因此,当涉及到fragment类中的getVIew()方法时,我遇到了一些奇怪的行为。从文档中,我希望获得在onCreateView方法中创建的视图,如下所述 获取片段布局的根视图(onCreateView(LayoutInflater、ViewGroup、Bundle)返回的根视图,如果提供 现在,我有一个视图,其中包含相当多的子视图,所以我想在尝试和“findViewById”时尝试保存,方法是实现一个ViewHolder类,类似于在ListView适配器中完成的方法,我将它设置为从onCreateView返回的视图的标记 稍后调用getView方法时,会出现这种奇怪的行为。看起来片段返回的是我创建的视图的父视图,而不是我创建的视图,这导致返回空标记 我编写了一小部分代码来打印视图(如果视图实际上是一个视图组,则嵌套子视图),这就是我得到的Android 是否返回视图的父视图?,android,fragment,Android,Fragment,因此,当涉及到fragment类中的getVIew()方法时,我遇到了一些奇怪的行为。从文档中,我希望获得在onCreateView方法中创建的视图,如下所述 获取片段布局的根视图(onCreateView(LayoutInflater、ViewGroup、Bundle)返回的根视图,如果提供 现在,我有一个视图,其中包含相当多的子视图,所以我想在尝试和“findViewById”时尝试保存,方法是实现一个ViewHolder类,类似于在ListView适配器中完成的方法,我将它设置为从onCr
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方法中实际创建的视图。那么为什么getView返回的是父级而不是视图呢?可能是您在创建视图完成之前创建了适配器吗?我遇到了一个问题,在onCreateView返回之前,有一个函数调用getView()并操作布局元素,导致使用了不正确的视图。我最终将膨胀视图从onCreateView发送到函数,结果很好。支持库在视图层次结构中插入了一个额外的视图。根据NoSaveStateFrameLayout.java中的一条评论:“该平台的前蜂窝版本没有View.setSaveFromParentEnabled(),因此我们将其插入视图和其父视图之间。” 因此,您需要通过以下方式检查:
View myView = (NoSaveStateFrameLayout)getView();
if (myView != null) {
myView = myView.getChildAt(0);
}
或者在实例变量中跟踪onCreateView返回的视图。如果我没有弄错的话,
NoSaveStateFrameLayout
仅出现在兼容包的片段中。无论如何,您都可以使用getView().findviewbyd(R.id.theIdOfTheScrollView)
。谢谢您的解释。我很困惑为什么getView()没有返回与我在onCreateView()中返回的视图相同的视图我无法在代码中使用NoSaveStateFrameLayout,即使我使用的是v4 compat库。