2011-12-09 17 views
3

ImageViewウィジェットでfindViewByIdがnullを返しています。何も起こっていないことを示すlogcatには何もエラーも何もありません。 IDの一致やその他の画像ビューが適切に設定されています。 Javaとxmlは、RelativeLayoutの子孫であるjavaで定義されたクラスを指すxmlのclassタグによってリンクされています。findViewById(...)がnullを返すのはなぜですか?

R.id.more_icon1の名前を変更しようとしましたが動作しませんでした。クリーニングを試みたが動作しなかった。デバッガを使用して、実際に過去に移動したかどうか、およびmMoreIcon == nullを返すかどうかを確認します。

これは、です。他のImageViewはうまく動作します。

誰でもこれまでに見たことがありますか、またはアイデアがありますか?

Javaコード:クラスは、XMLコード

@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); 

} 

RelativeLayout

の子孫である:

<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" /> 

おかげ

+2

私の側からの愚かな質問ですが、R.javaファイルを再作成しようとしましたか(Eclipseから削除しますか、それは再作成されます)、またはボタンの別の名前を使用していますか?私はかつて同じ種類の問題を抱えていました。 –

+0

愚かな質問ではありませんが、私は持っています。私はR.javaファイルを削除し、生成されたすべてのファイルを再作成するmake cleanを行いました。私も名前を変更しようとしました。最初はそれはちょうど__iconでした。 – FuegoFingers

+1

Hmm。今、これは奇妙なものです。私はあなたのレイアウトを再現しようとしました(レイアウトはRelativeLayoutの子孫であるが、それは問題ではないはずです)。 私は本当に問題が何かを知る手がかりがありません。/ binフォルダを消去してプロジェクトを再構築しようとしています。それは私にとっていくつかの説明できない問題を解決した。 –

答えて

6

私は同様の問題を持っていたし、私の問題はfindviewbyidが唯一の子ビューを見つけることでした。ビューが兄弟である場合は、親から呼び出す必要があります。アクティビティはそれを見つけることができるはずです。

+0

私はこれについて実際に考えましたので、私はそれを調べました。それを見つけるまでは良いはずです。他のoconsはそれを見つけるべきであるように機能します。 – FuegoFingers

6

アンドロイドを使用したとき、私はちょうど最近、同様の問題があった:視認性= TextViews上記ImageViewので

<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> 

を「行って」、アプリケーションは次の行でクラッシュしていました。

Javaファイル:

setContentView(R.layout.display_image); 

    imageView = (ImageView) findViewById(R.id.imageView); 

私はTextViews以下ImageViewのを移動した場合、アプリケーションが実行しますが、TextViewsはImageViewので覆われていました。

android:visibility = "gone"を削除すると、findViewByIdが正しく解決されました。私がしなければならなかったのは、後でコードの可視性を設定することでした。

textViewText.setVisibility(TextView.GONE); 
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を返すようですこれは私のコードでした。

関連する問題