我试图获取对LinearLayout
的引用,以便添加一个元素。
这是我的xml。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context=".MainActivity">
在其中插入行android:id="@+id/myLayout"
是否可以接受?
我尝试获取我的布局的不正确尝试的原因如下:
LayoutInflater myLayoutInflater;
LinearLayout myLayout;
if((myLayoutInflater = m_Context.getLayoutInflater()) != null) {
myLayout = (LinearLayout) myLayoutInflater.inflate(R.id.myLayout, null);
}
它在R.id.myLayout
行中的inflate()
下用红色表示:
Expected resource of type Layout. Ensure resource ids passed to APIs are of the right type.
答案 0 :(得分:2)
对这些方法有误解。
LayoutInflater.inflate
此方法期望布局文件(而不是布局视图)的id
。因此,您应该致电:
myLayoutInflater.inflate(R.layout.<NAME_OF_THE_XML_LAYOUT_FILE>, null);
该方法将返回已放大的整个视图。因此,既然您拥有膨胀的视图,则可以在其内部搜索Views
。您可以通过其ID搜索视图。
findViewById()
此方法需要id
中的View
。因此,在这里,您应该致电:
View inflatedView = myLayoutInflater.inflate(R.layout.<NAME_OF_THE_XML_LAYOUT_FILE>, null);
LinearLayout linearLayout = inflatedView.findViewById(R.id.myLayout); // Assuming you added android:id="@+id/myLayout" to the LinearLayout
请注意,首先,我们膨胀xml文件,然后开始在其中寻找视图。
如何
如果视图是“活动”的一部分,则无需膨胀该布局。您可以改为:
public void onCreate() {
....
// This will inflate and add your layout to the actvity
setContentView(R.layout.<NAME_OF_THE_LAYOUT_FILE);
// After that line, you can call:
LinearLayout linearLayout = inflatedView.findViewById(R.id.myLayout); // Assuming you added android:id="@+id/myLayout" to the LinearLayout
// Since your view was added to the activity, you can search for R.id.myLayout
// If you search for any view before setContentView(), it will return null
// Because no view was added the screen yet
}
答案 1 :(得分:1)
尝试这样的事情,
LayoutInflater myLayoutInflater = LayoutInflater.fromContext(mContext);
LinearLayout myLayout = myLayoutInflater.inflate(R.layout.layout_file, null);
View view = (LinearLayout)view.findViewById(R.id.myLayout);
答案 2 :(得分:1)
可以按ID为布局查找视图,就像对视图一样:
LinearLayout layout = (LinearLayout) findViewById(R.id.myLayout);
如果您处于“活动”上下文中,这将解决问题。
要向其中添加视图,您可以执行以下操作:
layout.addView(...)
您收到该错误消息是因为LayoutInflater期望布局文件名,而不是您的布局ID,所以类似R.layout.item_layout
。在大多数情况下,您也不想为父视图组传递null,因此,除非您知道父布局,否则我不建议以此方式对其进行夸大。