无法获取 Android 视图的资源 ID
Unable to get resource ID for Android view
我正在为我的 Android 应用程序创建自定义 ListFragment
。我想在 @id/listContainer
中添加一个 child。但是我无法使用 findViewById(android.R.id.listContainer)
.
获取对视图的引用
这是 ListFragment
的默认布局。
list_content.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:id="@+id/progressContainer"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:gravity="center">
<ProgressBar style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/loading"
android:paddingTop="4dip"
android:singleLine="true" />
</LinearLayout>
<FrameLayout android:id="@+id/listContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false" />
<TextView android:id="@+android:id/internalEmpty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout>
</FrameLayout>
这是我的自定义 ListFragment
代码。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(android.R.layout.list_content, container, false);
ProgressBar progressBar = new ProgressBar(getActivity());
progressBar.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER));
progressBar.setIndeterminate(true);
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
listContainer.addView(progressBar);
return view;
}
Android 工作室说 error: cannot find symbol variable listContainer
。
我做错了什么?
问题在于您访问资源的方式:
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
listContainer.addView(progressBar);
改为
ViewGroup listContainer = (ViewGroup) view.findViewById(com.android.internal.R.id.listContainer);
listContainer.addView(progressBar);
由于 listContainer
是内部资源,因此使用
调用它
com.android.internal.R.id.RESOURCE_ID
更改此行:
ViewGroup listContainer =
(ViewGroup)view.findViewById(android.R.id.listContainer);
到
ViewGroup listContainer =
(ViewGroup)view.findViewById(R.id.listContainer);
改变View view = inflater.inflate(android.R.layout.list_content, container, false);
到
View view = inflater.inflate(R.layout.list_content, container, false);
这里R
必须导入import com.your_package_name.R;
现在您可以更改
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
到
ViewGroup listContainer = (ViewGroup) view.findViewById(R.id.listContainer);
尝试getListView().getParent()
。由于 getListView() 为您提供了列表视图小部件,因此它的父项应该是您需要的框架布局。
我正在为我的 Android 应用程序创建自定义 ListFragment
。我想在 @id/listContainer
中添加一个 child。但是我无法使用 findViewById(android.R.id.listContainer)
.
这是 ListFragment
的默认布局。
list_content.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:id="@+id/progressContainer"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:gravity="center">
<ProgressBar style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/loading"
android:paddingTop="4dip"
android:singleLine="true" />
</LinearLayout>
<FrameLayout android:id="@+id/listContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false" />
<TextView android:id="@+android:id/internalEmpty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout>
</FrameLayout>
这是我的自定义 ListFragment
代码。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(android.R.layout.list_content, container, false);
ProgressBar progressBar = new ProgressBar(getActivity());
progressBar.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER));
progressBar.setIndeterminate(true);
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
listContainer.addView(progressBar);
return view;
}
Android 工作室说 error: cannot find symbol variable listContainer
。
我做错了什么?
问题在于您访问资源的方式:
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
listContainer.addView(progressBar);
改为
ViewGroup listContainer = (ViewGroup) view.findViewById(com.android.internal.R.id.listContainer);
listContainer.addView(progressBar);
由于 listContainer
是内部资源,因此使用
com.android.internal.R.id.RESOURCE_ID
更改此行:
ViewGroup listContainer =
(ViewGroup)view.findViewById(android.R.id.listContainer);
到
ViewGroup listContainer =
(ViewGroup)view.findViewById(R.id.listContainer);
改变View view = inflater.inflate(android.R.layout.list_content, container, false);
到
View view = inflater.inflate(R.layout.list_content, container, false);
这里R
必须导入import com.your_package_name.R;
现在您可以更改
ViewGroup listContainer = (ViewGroup) view.findViewById(android.R.id.listContainer);
到
ViewGroup listContainer = (ViewGroup) view.findViewById(R.id.listContainer);
尝试getListView().getParent()
。由于 getListView() 为您提供了列表视图小部件,因此它的父项应该是您需要的框架布局。