14

findViewByIdが間違った要素を返す理由を私は理解できない、ここにクラスです:findViewByIdが間違った要素を戻しますか?

public class EventDetailsFragment extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.event_details); 
     Log.d("First", findViewById(R.id.tuxtView1).getClass().toString()); 
     Log.d("Second", findViewById(R.id.tuxtView2).getClass().toString()); 
     Log.d("Third", findViewById(R.id.imageView1).getClass().toString()); 
    } 
} 

そして、ここではXMLです:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/green" 
android:orientation="horizontal" 
android:paddingLeft="10dp" 
android:paddingRight="10dp" 
android:paddingTop="10dp"> 

    <RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="0dp" 
    android:layout_height="175dp" 
    android:layout_gravity="center_horizontal" 
    android:layout_weight="1" 
    android:background="#fff" 
    android:gravity="right" > 

     <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="110dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/ic_event_image" /> 

     <TextView 
     android:id="@+id/tuxtView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" />  
     <TextView 
     android:id="@+id/tuxtView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tuxtView2" 
     android:layout_toRightOf="@+id/imageView1" 
     android:textColor="#555" 
     android:textSize="20dp" /> 

    </RelativeLayout> 

</LinearLayout> 

logcatの出力リレーは次のとおりです。

12-26 23:43:20.249: D/First(6789): class android.widget.TextView 
12-26 23:43:20.249: D/Second(6789): class android.widget.ImageView 
12-26 23:43:20.249: D/Third(6789): class android.widget.TextView 

それでは、なぜ私はidがR.id.tuxtView2の画像ビューとidがR.id.imageView1のテキストビューを取得するのですか? TextViewとしてキャストされたR.id.tuxtView2にテキスト値を割り当てたい場合、アプリケーションがクラッシュします。

+2

R.javaでプロジェクトをリロードしてみてください。あるいは、setContentViewを使用して適切なファイルを呼び出していることを確認してください。 –

+0

よく書かれた質問。申し訳ありませんが、なぜこれが起こるかの手がかりがありません。 –

+0

@JeremyD、うわー、私は、Eclipseを再起動する以外は、何時間も何も試していた。私は日食を再開し、それは突然再び働いた。私は自分のコードで何か間違っていると思った。答えとして投票し、解決したものとしてマークしてください。ありがとう! – jonepatr

答えて

21

あなたはsetContentViewとの良好なファイルを呼び出しているR.javaと間違って何か多分、あなたのプロジェクトを再読み込みしてください、または確認するには何の問題もありません。

プロジェクトを更新/消去すると、R.javaファイルがリロードされ、名前付きウィジェットが検索されます。

+2

あなたは正しいのでこの答えにピギーバックしますが、非常に似た問題を解決するには、私の/ genフォルダの内容を削除する唯一の方法でした。 – jiggy

+2

ありがとうございます! Googleのコードで "1 == 2"と書かれていると非常に恐ろしいです。) – Adam

+1

NB:あなたの/ genフォルダを削除して削除しないでください。全体を削除すると、一時的にADTが中断されます(ただし、修正方法を教えてもらえますが問題ありません)。ただし、SVNを永久に破棄します(SVNを使用している場合)。ああ。唯一の解決策は、SVNのフォルダを "元に戻す"ことです。 – Adam

2

コードをコピーしてダミーのアプリを作成しました。私はこれらの結果を得た:

12-27 00:03:48.332: D/First(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Second(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Third(9165): class android.widget.ImageView 

はどうやらコード

+0

ありがとう、私は問題の原因と判明したEclipseを再起動する以外はすべて試しました。あなたの時間をとっていただきありがとうございます:) – jonepatr

+0

問題はありません。次回はあなたのプロジェクトを右クリックし、Androidツール - >プロジェクトプロパティの修正を選択するか、Eclipseバーのプロジェクト - >プロジェクトのクリーンアップを選択してください。 – RonzyFonzy

0

私はここでほぼすべてを試しましたが、新しいコンポーネントをアクティビティに追加して実行した後、新しいコンポーネントが表示されないことに気づくまでは何も機能しませんでした。それは私のアプリが実行で更新されていないことを示唆した。手動で古いバージョンのアプリをアンインストールしてから、もう一度実行していました。

関連する問題