通过getIdentifier的资源ID返回0

时间:2016-04-27 08:49:02

标签: java android xml

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类。

3 个答案:

答案 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

的价值