我如何获得对 LinearLayout 的引用?
How do I get a reference to a LinearLayout?
我正在尝试获取对 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);
}
它在 inflate()
行的 R.id.myLayout
下划线,用红色表示:
Expected resource of type Layout. Ensure resource ids passed to APIs are of the right type.
尝试这样的事情,
LayoutInflater myLayoutInflater = LayoutInflater.fromContext(mContext);
LinearLayout myLayout = myLayoutInflater.inflate(R.layout.layout_file, null);
View view = (LinearLayout)view.findViewById(R.id.myLayout);
可以像查找视图一样按 ID 查找布局视图:
LinearLayout layout = (LinearLayout) findViewById(R.id.myLayout);
如果您处于 Activity 上下文中,这将起到作用。
要向其中添加视图,您可以执行以下操作:
layout.addView(...)
您收到该错误是因为 LayoutInflater 需要布局文件的 名称 而不是您的布局 ID,因此类似于 R.layout.item_layout
。在大多数情况下,您也不想为父视图组传递 null,因此我不建议以这种方式膨胀它,除非您知道父布局。
对这些方法存在误解。
LayoutInflater.inflate
此方法需要 id
布局文件(而不是布局视图)。所以,你应该调用:
myLayoutInflater.inflate(R.layout.<NAME_OF_THE_XML_LAYOUT_FILE>, null);
该方法将 return 膨胀的整个视图。所以,现在您有了膨胀视图,您可以在其中搜索 Views
。您可以通过他们的 ID 搜索视图。
findViewById()
此方法需要 View
的 id
。所以,在这里,你应该调用:
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 文件,然后,我们开始在其中搜索视图。
然而
如果您的视图是 Activity 的一部分,则无需扩充该布局。您可以改为:
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
}
我正在尝试获取对 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);
}
它在 inflate()
行的 R.id.myLayout
下划线,用红色表示:
Expected resource of type Layout. Ensure resource ids passed to APIs are of the right type.
尝试这样的事情,
LayoutInflater myLayoutInflater = LayoutInflater.fromContext(mContext);
LinearLayout myLayout = myLayoutInflater.inflate(R.layout.layout_file, null);
View view = (LinearLayout)view.findViewById(R.id.myLayout);
可以像查找视图一样按 ID 查找布局视图:
LinearLayout layout = (LinearLayout) findViewById(R.id.myLayout);
如果您处于 Activity 上下文中,这将起到作用。
要向其中添加视图,您可以执行以下操作:
layout.addView(...)
您收到该错误是因为 LayoutInflater 需要布局文件的 名称 而不是您的布局 ID,因此类似于 R.layout.item_layout
。在大多数情况下,您也不想为父视图组传递 null,因此我不建议以这种方式膨胀它,除非您知道父布局。
对这些方法存在误解。
LayoutInflater.inflate
此方法需要 id
布局文件(而不是布局视图)。所以,你应该调用:
myLayoutInflater.inflate(R.layout.<NAME_OF_THE_XML_LAYOUT_FILE>, null);
该方法将 return 膨胀的整个视图。所以,现在您有了膨胀视图,您可以在其中搜索 Views
。您可以通过他们的 ID 搜索视图。
findViewById()
此方法需要 View
的 id
。所以,在这里,你应该调用:
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 文件,然后,我们开始在其中搜索视图。
然而
如果您的视图是 Activity 的一部分,则无需扩充该布局。您可以改为:
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
}