findViewById在ImageView小部件上为我返回null。没有错误,logcat中没有任何内容表明发生了什么。正确设置了id的匹配和其他图像视图。 Java和xml由xml中的class标记链接,指向java中定义的类,它是RelativeLayout的后代。
我尝试更改R.id.more_icon1的名称,但这不起作用。尝试清洁,但没有奏效。使用调试器来查看它确实只是移动过去以及何时返回mMoreIcon == null。
奇怪的是其他ImageView的工作正常。
以前见过这个或有任何想法的人?
Java代码:Class是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" />
由于
答案 0 :(得分:8)
我最近在使用android时遇到了类似的问题:visibility =“gone”
<RelativeLayout
android:id="@+id/relativeLayoutMessage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/linearLayoutMenu" android:layout_above="@+id/layoutButtons">
<ImageView android:id="@+id/imageView"
android:layout_width="fill_parent"
android:contentDescription="@string/image_attachment"
android:src="@drawable/icon"
android:scaleType="fitCenter"
android:layout_height="fill_parent"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dip"
android:layout_alignParentTop="true"/>
<TextView
android:id="@+id/textViewText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:gravity="center"
android:layout_below="@+id/textViewTitle"/>
</RelativeLayout>
使用TextViews上方的ImageView,应用程序将在以下行崩溃。
Java文件:
setContentView(R.layout.display_image);
imageView = (ImageView) findViewById(R.id.imageView);
如果我将ImageView移动到TextViews下面,应用程序就会运行,但ImageView会覆盖TextViews。
一旦我删除了android:visibility =“gone”,findViewById就会正确解析。我所要做的就是之后在代码中设置可见性。
textViewText.setVisibility(TextView.GONE);
答案 1 :(得分:6)
我有一个类似的问题,我的问题是findviewbyid只找到子视图。如果视图是兄弟姐妹,则必须从父母那里调用它。活动应该能够找到它。
答案 2 :(得分:3)
我也有这个问题。这是我的代码:
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);
似乎如果在setContentView()之前实例化你的布局,它将返回null。