Android LayoutFlater是否可以使用包含的布局xml文件?
问题是:我有一个使用include标记的布局。布局简单->Android LayoutFlater是否可以使用包含的布局xml文件?,android,android-layout,Android,Android Layout,问题是:我有一个使用include标记的布局。布局简单-> <LinearLayout> <TextView ...> <LinearLayout> <include ...> </LinearLayout> </LinearLayout> 现在包含的文件只不过是: <LinearLayout> <TextView ... android:id="@+id/inner_te
<LinearLayout>
<TextView ...>
<LinearLayout>
<include ...>
</LinearLayout>
</LinearLayout>
现在包含的文件只不过是:
<LinearLayout>
<TextView ... android:id="@+id/inner_text">
</LinearLayout>
现在,如果我尝试在create或onStart调用中访问TextView内部_文本,它会抛出一个NPE。我曾尝试使用LayoutInflater导入包含的xml文件,然后访问内部文本,但没有效果-它总是失败
所以,问题是:LayoutFlater是否可以处理父xml文件中包含的xml文件?我想做的是获取包含的xml文件的内容——并根据偏好设置整个内容为可见或不可见
似乎没有任何东西允许我抓取TextView对象
现在,当我将xml作为嵌套元素包含在父文件中(不使用include标记)时,它可以很好地访问LinearLayout,但这与我尝试使视图布局动态化的目的背道而驰,也就是说,我可以随意更改包含子布局的内容,而不必对父布局进行任何更改
任何帮助、指针、建议->非常感谢。作为建议,我认为您可以在主xml中保留一些布局组件为空,它们在运行时,膨胀主xml,然后膨胀包含的xml,并将包含的内容添加到主xml中留下的空间中
但我认为你的例子必须起作用,在内部,Android使用充气机来膨胀资源。你能编辑并讲多一点吗?代码示例可能会有所帮助。好吧,非常奇怪,当您从任何xml资源(如果xml资源有或没有包含嵌套资源)膨胀视图时,视图必须包含所有解析的xml。因此,是的,LayoutFlater可以处理父xml文件中包含的xml文件 我复制了我现在的方式 我的通用布局(带有文本、进度条和图像的标题)
仅此而已,我希望这能对您有所帮助。Thanx需要帮助-我发现了我的问题所在-我正在尝试膨胀包含的文件-而不是父容器-因此它从未找到元素。我希望文档中会提到这一点——从逻辑上讲,我认为父xml文件会加载——但包含的文件可能需要膨胀——我猜不会 感谢您提交的代码示例,现在可以正常工作了 塔克斯
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip">
<ImageView
android:id="@+id/genericHeaderLogoPin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/logo_pin"/>
<TextView
android:id="@+id/genericHeaderTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/genericHeaderLogoPin"
android:textSize="18dip"
android:textStyle="bold"
android:textColor="#FF0C9994"/>
<ProgressBar
android:id="@+id/genericHeaderProgressBar"
android:layout_width="25dip"
android:layout_height="25dip"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/genericHeaderLogoPin"
style="@android:style/Widget.ProgressBar.Inverse"
android:visibility="gone"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/background_new_search_activity_1">
<include layout="@layout/generic_header_layout" android:id="@+id/listaBusquedasHeader"/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"/>
</LinearLayout>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_NO_TITLE);
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.lista_busquedas_activity, null);
setContentView(view);
listView = (ListView) findViewById(android.R.id.list);
listView.setOnItemClickListener(listItemClickListener);
((TextView)findViewById(R.id.genericHeaderTitle)).setText(R.string.messagesActivityTitle);
}