2016-04-27 12 views
2
private String isChecked(String id) { 
    id = "R.id." + id; 
    int ID = getResources().getIdentifier(id, "id", "com.example.android.justjava"); 
    CheckBox checkBox = (CheckBox) findViewById(ID); 
    return String.valueOf(checkBox.isChecked()); 
} 

Iは、上記の機能にcheck_whipped_creamの値(XML文書のチェックボックスのID)を渡し、私はアプリケーションをデバッグするとき、変数IDは常に0に等しくなります。何が問題なの?リソースIDを返す0

注:最終行メソッドで呼び出されるisChecked()は、CheckBoxクラスのものです。

答えて

4

大きな問題は、あなたがすでに"id"第二引数として提供されているのでidR.id.idを探すには、Androidの求めている

id = "R.id." + id; 

です。ちょうどidでなければなりません。スペルの間違った単語の問題を避けるために、あなた自身でハードコーディングするのではなく、.getPackageName()の戻り値に頼るべきです。

使用

はのは、例を見てみましょう何が何であるかを理解するためにid = "R.id." + id;

getResources().getIdentifier(id, "id", getPackageName()); 
+0

idは文字列です... "hello"を挿入すると "R.id" + "hello" –

+1

があり、識別子が "hello"で "id"が宣言されている場合は "hello"のみ提供する必要があります – Blackbelt

+0

ああ、今理解しています...私たちはR.id.部? –

1

パッケージはあなたがcontext.getPackageNameを(使用できる正しいことを確認するために、まず)

そして、あなたのIDが間違っている、それにR.idを連結していない、それはあなたの間違いです;)

+1

と同等の価値を提供します。それは今働いている。 –

1

を取り除きます。上記のコード断片で

<TextView 
     android:id="@+id/lbl_welcome" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/img_logo" 
     android:layout_marginTop="20dp" 
     android:gravity="center" 
     android:text="YOUR SHOPPING COMPANION!" 
     android:textColor="@color/toolbar" 
     android:textSize="@dimen/font_12"/> 

、私はこの要素を取得する場合、私は

R.id.lbl_welcome を使用します。これは、実際の値がややこの

よう
public final class R { 
    public static final class id { 
     public static final int lbl_welcome=0x7f100197; 
    } 
} 

あるR.javaファイル、であります私たちのケースではlbl_welcomeのビューの文字列名がある場合は、メソッドを使用できますgetIdentifier -

コードの
getResources().getIdentifier("lbl_welcome", "id", getPackageName()); 

上記の作品は、あなたがそんなにありがとうR.id.lbl_welcome