java android getResources().getIdentifier()

13

我如何从R中获取一个ID的int值?当我使用getIdentifier时,它只会返回0

 int i = getArguments().getInt(SELECTION_NUMBER);
 String drawerSelection = getResources().getStringArray(R.array.drawerSelection_array)[i];

int panelId = this.getResources().getIdentifier(drawerSelection.toLowerCase(),"id",getActivity().getPackageName());

编辑

Xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/Bus_Schedules"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

日志

06-10 21:24:30.372: I/System.out(3572): Selection = Bus_Schedules
06-10 21:24:30.372: I/System.out(3572): panelId = 0

R.java

    public static final class id {
    public static final int Bus_Schedules=0x7f090004;
    public static final int basemenu=0x7f090005;
    public static final int content_frame=0x7f090001;
    public static final int drawer_layout=0x7f090000;
    public static final int left_drawer=0x7f090002;

当它返回0时,意味着该id未被找到。drawerSelection的值是多少?您确认已经定义了该名称的id资源吗? - Ted Hopp
你需要发布更多关于问题的信息,以获得更好的回应。使用调试器(或日志语句)来确定drawerSelection变量具体的值是什么。同时,请发布定义相应id为资源的适用xml代码。(顺便说一下,在调用toLowerCase时可以省略默认语言环境参数,因为它会自动使用默认值,这样只会使你的代码变得混乱。) - Ted Hopp
3个回答

25

问题似乎在于您将drawerSelection转换为小写字母。正如在R.java文件中清楚地显示的那样,标识符的大小写是保留的。尝试调用:

int panelId = this.getResources().getIdentifier(drawerSelection,"id",getActivity().getPackageName());

9

刚刚回顾了我正在写的一个项目:

int id = getResources().getIdentifier("resourcename", "drawable", getPackageName());

getResources 返回 int

更新:检查 R.array.drawerSelection_array,只包含现有元素的 ID。


这并没有回答问题。它也为 OP 返回了一个 int。对于 OP 的问题是,int 的值为 0。 - Ted Hopp
更新:请检查R.array.drawerSelection_array,仅包括现有元素的ID。 - Spik330
只需添加可绘制名称,无需使用“R.drawable.”。 - sud007

-1

尝试使用这个方法。

public static int getResId(String fieldName, Context context, Class<?> c) {

    try {
        Field field= c.getDeclaredField(fieldName);
        return field.getInt(field);
    } catch (Exception e) {
        return 0;
    } 
}

调用

 //edtUserName is my field id
 getResId("edtUserName", context, id.class);

我没有使用上下文,而是使用了LayoutInflater和ViewGroup。 - Spik330
它无法理解该语句的上下文。 - Spik330
上下文是您的应用程序基础上下文。只需获取它- getApplicationContext(); - Adnan
你甚至没有在这个方法中使用上下文。你应该使用getIdentifier()。 - box

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接