Android 为什么findViewById(…)返回null?

Android 为什么findViewById(…)返回null?,android,android-layout,android-widget,Android,Android Layout,Android Widget,findViewById在ImageView小部件上为我返回null。logcat中没有错误,也没有任何内容指示正在发生的情况。id的匹配和其他图像视图设置正确。Java和xml通过xml中的class标记链接,class标记指向Java中定义的类,Java是RelativeLayout的后代 我试图更改R.id.more\u icon1的名称,但没有成功。我试过打扫,但没用。使用调试器查看它是否真的只是在返回mMoreIcon==null时移动过去 值得注意的是,另一个ImageView的工作

findViewById在ImageView小部件上为我返回null。logcat中没有错误,也没有任何内容指示正在发生的情况。id的匹配和其他图像视图设置正确。Java和xml通过xml中的class标记链接,class标记指向Java中定义的类,Java是RelativeLayout的后代

我试图更改R.id.more\u icon1的名称,但没有成功。我试过打扫,但没用。使用调试器查看它是否真的只是在返回mMoreIcon==null时移动过去

值得注意的是,另一个ImageView的工作很好。

有人见过这个或者有什么想法吗

Java代码:类是RelativeLayout的后代

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    mText1 = (TextView) findViewById(R.id.text1);
    mText2 = (TextView) findViewById(R.id.text2);
    mIcon1 = (ImageView) findViewById(R.id.icon1);
    mIcon2 = (ImageView) findViewById(R.id.icon2);
    // mMoreIcon is the one that gets set as null. mIcon1 and mIcon2 work just fine.
    mMoreIcon = (ImageView) findViewById(R.id.more_icon1);

}
XML代码:

<ImageView android:id="@+id/icon1"
    style="@style/SuggestionIcon1"
    android:scaleType="centerInside"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
/>

<!--     This is the icon that is being returned as null -->
<ImageView android:id="@+id/more_icon1"
    style="@style/MoreIcon2"
    android:scaleType="centerInside"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:visibility="gone" />

<ImageView android:id="@+id/icon2"
    style="@style/SuggestionIcon2"
    android:scaleType="centerInside"
    android:layout_toLeftOf="@id/more_icon1"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:visibility="gone" />


谢谢

我有一个类似的问题,我的问题是findviewbyid只查找子视图。如果视图是同级视图,则必须从父级调用它。活动应该能够找到它

我最近在使用android时遇到了类似的问题:visibility=“gone”

如果我将ImageView移动到TextView下方,应用程序将运行,但ImageView覆盖了TextView

一旦我删除了android:visibility=“gone”,findviewbyd就正确解析了。我所要做的就是在代码中设置可见性

textViewText.setVisibility(TextView.GONE);

我也有这个问题。这是我的密码:

RelativeLayout ml = (RelativeLayout) findViewById(R.id.layout);
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_the_next);
将其更改为此后,它工作正常:

RelativeLayout ml;
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_the_next);
ml = (RelativeLayout) findViewById(R.id.layout);

如果您在设置ContentView()之前实例化布局,它会返回null。

我这方面的问题很愚蠢,但是您是否尝试过重新创建R.java文件(从Eclipse中删除它,它将被重新创建)或为按钮使用其他名称?我曾经有过同样的问题,当我把id和数字一起使用时。这不是一个愚蠢的问题,但我确实有。我对它进行了清理,删除了R.java文件并重新创建了所有生成的文件。我还试着改了名字。一开始它只是一个图标。现在这是一个奇怪的问题。我尝试重新创建您的布局(除了布局是RelativeLayout的后代,但这不应该是一个问题),它对我来说很好。我真的不知道问题出在哪里。总是有人试图擦除/bin文件夹并重建项目。这解决了我以前几个无法解释的问题。对我来说,这是一个很糟糕的参考问题,所以我实际上没有在正确的父视图下寻找视图。复制/粘贴代码的工件。我确实考虑过这一点,所以我研究了它,它应该很好地找到了它。其他奥运会组委会也在工作,所以应该找到他们。
RelativeLayout ml = (RelativeLayout) findViewById(R.id.layout);
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_the_next);
RelativeLayout ml;
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_the_next);
ml = (RelativeLayout) findViewById(R.id.layout);