这就是问题:我有一个使用include标签的布局。布局很简单 - >
<LinearLayout>
<TextView ...>
<LinearLayout>
<include ...>
</LinearLayout>
</LinearLayout>
现在包含的文件只不过是:
<LinearLayout>
<TextView ... android:id="@+id/inner_text">
</LinearLayout>
现在,如果我尝试在create或onStart调用中访问TextView inner_text,它会抛出一个NPE。我已经尝试使用LayoutInflater来输入包含的xml文件,然后访问inner_text但无济于事 - 它总是失败。
所以,问题是:LayoutInflater是否与包含的父xml文件的xml文件一起使用?我想要做的是获取包含的xml文件的内容 - 并根据首选项将整个内容设置为可见或不可见。
似乎没有什么能让我抓住TextView对象。
现在,当我将xml作为嵌套元素包含在父文件中时(不使用include标签) - 然后它就可以很好地访问LinearLayout - 但这无法实现我尝试使视图布局动态的目的 - 也就是说,我可以随意更改包含布局的子项的内容 - 而不必对父布局进行任何更改。
任何帮助,指示,建议 - &gt;非常感谢。
答案 0 :(得分:0)
作为建议我认为你可以在主xml中将一些Layout组件留空,它们在运行时,膨胀主xml,然后包含xml并添加你在main中留下的空间中包含的内容。 / p>
但我认为你的例子必须工作,Android内部使用inflater来充斥资源。你能编辑一下吗?代码示例可以帮助您。
答案 1 :(得分:0)
嗯,非常奇怪,当你从任何xml资源中膨胀一个视图时(如果xml资源有或没有嵌套资源包含include),视图必须包含所有已解析的xml。所以,是的,LayoutInflater使用包含父xml文件的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>
我的父布局...包括通用布局和ListView
<?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>
我的onCreate方法,它夸大了上面提到的父布局:
@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);
}
就是这样,我希望这可以帮助你。
答案 2 :(得分:0)
Thanx的帮助 - 我发现了我的问题 - 我试图给包含的文件充气 - 而不是父容器 - 这就是为什么它从未找到元素。我希望文档会提到 - 逻辑上我认为父xml文件会加载 - 但包含的文件可能需要膨胀 - 猜不是。
现在感谢您提交的代码示例。
感谢名单。