Android:部品の取得

android-component.png
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Red" />
</LinearLayout>

Activityの初期化にて

findViewById

TextView mText;
mText=(TextView)findViewById(R.id.textView1);

SetId

setIdでもいい。ただし、setIdする前に初期化しないとエラーになる。

TextView mText=new TextView(this);
mText.setId(R.id.textView1);

findViewByIdでnullが返ってくる場合

findViewByIdで現在設定されていない他のレイアウトからオブジェクトを取得しようとしても、普通に取得しようとしてもnullが返ってくる。
つまり、setContentView(画面A.xml);
の後に、画面B.xmlの部品を取得しようとしてもnullになってしまうってこと。

エラー

R cannot be rosoleved as a variable

他のPCからプロジェクトをお引っ越ししたときに起きた。

gen ディレクトリ以下を全て削除してみる
プロジェクト → クリーン としてみる

それでも消えないなら、パッケージの名前がR.javaのやつと一致してなかった、なんてことがあったぞ。

R.の使えないクラスでやる場合

Activity mActivity;//メンバ変数で持っておく
mActivity.getResources().getIdentifier("名前","drawable",mActivity.getPackageName()));

サポートサイト Wikidot.com