因此,当涉及片段类中的getVIew()方法时,我遇到了一些奇怪的行为。从文档中我期望获得在onCreateView方法中创建的视图,如此处所述http://developer.android.com/reference/android/app/Fragment.html#getView()
“获取片段布局的根视图(onCreateView(LayoutInflater,ViewGroup,Bundle)返回的布局),如果提供的话”
现在,我有一个视图,里面有相当数量的孩子,所以我想尝试保存,当我尝试通过实现一个ViewHolder类来实现“findViewById”,类似于在ListView适配器中完成的常见方式设置为onCreateView返回的视图的标记。
稍后我调用getView方法时会发生奇怪的行为。看来该片段正在返回我创建的视图的父节点而不是我创建的视图,这导致返回空标签。
我写了一小段代码打印出一个视图(如果视图实际上是一个viewGroup,则嵌套子节点),这就是我得到的。
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会返回父节点而不是视图呢?
答案 0 :(得分:1)
支持库在视图层次结构中插入另一个视图。根据NoSaveStateFrameLayout.java中的评论:"该平台的Pre-Honeycomb版本没有View.setSaveFromParentEnabled(),所以我们将其插入到视图及其父级之间。"
所以你需要用以下方法检查:
View myView = (NoSaveStateFrameLayout)getView();
if (myView != null) {
myView = myView.getChildAt(0);
}
或者跟踪onCreateView在实例变量中返回的视图。
答案 1 :(得分:0)
在onCreateView
完成之前,您是否正在创建适配器?我有一个问题,我有一个函数调用getView()并在onCreateView返回之前操纵布局元素,导致使用不正确的视图。我最终将onCreateView的膨胀视图发送到函数,并且它工作正常。