2016-04-27 77 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()); 
} 

我通過在的check_whipped_cream一個值(A複選框的XML文檔在ID)插入上面的功能,但是當我調試應用程序,該可變ID總是變得等於0。它有什麼問題?資源ID返回0

注意:在最後一行方法中調用isChecked()來自CheckBox類。

回答

4

的大問題是

id = "R.id." + id; 

你問的Android尋找R.id.idid因爲你已經提供作爲"id"第二個參數。它應該只是id。爲避免拼寫錯誤的單詞出現問題,您應該依賴.getPackageName()的返回值,而不是自行編寫硬編碼。

使用

擺脫id = "R.id." + id;

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

id是一個字符串...如果我插入「hello」,它將是「R.id。」+「hello」 –

+1

如果你有和「id」宣佈與標識符「你好」,你只需提供「你好」 – Blackbelt

+0

哦,我現在明白了......我們不需要R.id.部分? –

1

首先,要確保包裝是正確的,你可以使用context.getPackageName()

卡和身份證是錯誤的,不串聯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 它的實際價值是在R.java文件,這有點像這樣

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

如果你有視圖的字符串名稱,在我們的案例中是lbl_welcome那麼我們可以使用方法getIdentifier -

getResources().getIdentifier("lbl_welcome", "id", getPackageName()); 

上面這段代碼會給你的價值相當於R.id.lbl_welcome