2016-04-27 131 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