无法获取Android视图的资源ID

时间:2015-11-01 01:11:12

标签: android android-layout android-fragments android-listfragment

我为Android应用程序创建了自定义ListFragment。我想将一个孩子添加到@id/listContainer。但是我无法使用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 Studio说error: cannot find symbol variable listContainer

我做错了什么?

4 个答案:

答案 0 :(得分:1)

试试getListView().getParent()。由于getListView()为您提供了列表视图窗口小部件,因此它的父窗口应该是您需要的框架布局。

答案 1 :(得分:0)

问题在于您访问资源的方式:

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

答案 2 :(得分:0)

更改此行:

  ViewGroup listContainer = 
                 (ViewGroup)view.findViewById(android.R.id.listContainer);

  ViewGroup listContainer = 
                 (ViewGroup)view.findViewById(R.id.listContainer);

答案 3 :(得分:0)

更改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);