Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否返回视图的父视图?_Android_Fragment - Fatal编程技术网

Android 是否返回视图的父视图?

Android 是否返回视图的父视图?,android,fragment,Android,Fragment,因此,当涉及到fragment类中的getVIew()方法时,我遇到了一些奇怪的行为。从文档中,我希望获得在onCreateView方法中创建的视图,如下所述 获取片段布局的根视图(onCreateView(LayoutInflater、ViewGroup、Bundle)返回的根视图,如果提供 现在,我有一个视图,其中包含相当多的子视图,所以我想在尝试和“findViewById”时尝试保存,方法是实现一个ViewHolder类,类似于在ListView适配器中完成的方法,我将它设置为从onCr

因此,当涉及到fragment类中的getVIew()方法时,我遇到了一些奇怪的行为。从文档中,我希望获得在onCreateView方法中创建的视图,如下所述

获取片段布局的根视图(onCreateView(LayoutInflater、ViewGroup、Bundle)返回的根视图,如果提供

现在,我有一个视图,其中包含相当多的子视图,所以我想在尝试和“findViewById”时尝试保存,方法是实现一个ViewHolder类,类似于在ListView适配器中完成的方法,我将它设置为从onCreateView返回的视图的标记

稍后调用getView方法时,会出现这种奇怪的行为。看起来片段返回的是我创建的视图的父视图,而不是我创建的视图,这导致返回空标记

我编写了一小部分代码来打印视图(如果视图实际上是一个视图组,则嵌套子视图),这就是我得到的

 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库。