我有以下代码:

private void inflateMenu() {
    if (menu == null) {
        mFanView = (LinearLayout) findViewById(R.id.fanView);
        final View v = LayoutInflater.from(getContext()).inflate(
                R.layout.sidemenu, mFanView);
        menu = (MenuView) v.findViewById(R.id.listViewMenu);
    }
        menu.setColors(backgroundColor, selectedColor, unselectedColor);
}

调试时,v包含一个MenuView,其ID等于R.id.listViewMenu + 1。当然,这会在menu.setColors上抛出一个NPE。

为什么R.id.listViewMenu包含的ID不会导致XML中具有该ID的 View ?

我试图清理我的项目,但仍然保持不变。

编辑:发布请求的文件。

sidemenu.xml
<com.ui.library.slidingmenu.MenuView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listViewMenu"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

编辑:问题解决了。

对于任何因为findViewById返回null的人而来:清理项目。如果不起作用,请再次清理项目。如果不起作用,请清除所有项目。直到它起作用。如果不起作用,请询问。

最佳答案

试试这个:

(在Eclipse菜单栏中)“项目”>“清理”

说明:有时在构建过程中,R.java类困惑并且导致对id的错误引用。有时,当我编译时,图像会突然更改,因为与此相关的ID也已更改。任何资源,布局,ID等都可能发生这种情况。

一种重新生成R.java类并修复不规则性的方法是清理项目。

希望对您有所帮助!

关于android - View.findViewById()返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13415556/

10-12 05:05