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
(xml文档中的复选框&id)传入上面的函数,但是当我调试应用程序时,变量ID
总是变得相等它有什么问题?
注意:最后一行方法中调用的isChecked()
来自CheckBox类。
答案 0 :(得分:3)
最大的问题是
id = "R.id." + id;
您要求android在R.id.id
中查找id
,因为您已经提供"id"
作为第二个参数。它应该只是id
。为避免拼写错误的单词出现问题,您应该依赖.getPackageName()的返回值,而不是自己对其进行硬编码。
使用
摆脱id = "R.id." + id;
getResources().getIdentifier(id, "id", getPackageName());
答案 1 :(得分:1)
首先,为了确保包正确,您可以使用context.getPackageName()
你的身份证明是错的,不要将R.id连接到它,这是你的错误;)
答案 2 :(得分: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