相关文章推荐
不羁的盒饭  ·  用open()替代fput()/fgets( ...·  1 年前    · 
爱运动的鸡蛋面  ·  pycharm ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I've tried this:

r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2");
Log.i("FindBall","R = "+r);

And this:

r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);

But 'r' always ends up as zero.

I'm calling this line from inside a helper class that's not an Activity and doesn't extend anything, so I can't simply call getResources(), but I can pass it from my SurfaceView.

Eventually, I want to replace "ball_red" with a variable, but first thing's first. This isn't working.

com.Juggle2 is indeed my package name. drawable is the res folder that it's in, and, the name of the file is indeed ball_red.

R.java says:

        public static final int ball_red=0x7f020027;

So I'm not sure why it isn't working.

So I can't use Resources, I must pass a context, and I'm doing that this way: Inside here:

class Collection extends SurfaceView implements SurfaceHolder.Callback {

I'm making a new instance of my class and passing it getContext() as a parameter.

As per documentation of Resources.getSystem(): "Return a global shared Resources object that provides access to only system resources (no application resources), and is not configured for the current screen (can not use dimension units, does not change based on orientation, etc)." As answered by @Sajmon, you'll need to pass in a Context instance to your (static) helper method to access application-specific resources. – MH. Mar 18, 2013 at 23:56 btw the type aspect is case sensitive, e.g. "strings", "drawable" and not "Strings", or "Drawable" – Ed Manners Apr 3, 2017 at 14:41

Since you are inside of an activity it is enough to write

int resId = YourActivity.this.getResources().getIdentifier(
    "ball_red",
    "drawable",
    YourActivity.this.getPackageName()

or if you're not calling it from an inner class

int resourceID = getResources().getIdentifier(
    "ball_red",
    "drawable",
    getPackageName()
getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)

Check

Check also in your R.java whether there is a drawable with the name ball_red

e.g.:

public static final class drawable {
        public static final int ball_red = 0x7f020000;
If you're not in any activity then you must pass a context instead of resources as parameter then do this

int resId = context.getResources().getIdentifier(
    "ball_red",
    "drawable",
    context.getPackageName()
                I'm not calling it from an activity, and I don't have access to getResources(), but I can pass Resources in from a SurfaceView class, so I'll try that
– user773737
                Mar 18, 2013 at 22:45
                @OWiz If you're not in any activity then you must passe a context instead of resources as parameter then do this  int resId=context.getResources().getIdentifier("ball_red", "drawable", context.getPackageName());
– Festus Tamakloe
                Mar 18, 2013 at 22:59
                @OWiz try then to passe getApplicationContext(). If there is styl null then there is problem with your app. sO far the context is null, you can not access resources too
– Festus Tamakloe
                Mar 18, 2013 at 23:09

For Xamarin users I had the issue where I had added an icon with lower and uppercase letters (e.g. iconVaccine.png ) and was referring to the uppercase name iconVaccine.

Xamarin will allow you to do this (even though you shouldn't), but when the app gets compiled the name are flattened to lower case, so you must refer to the lower case variant as follows:

Image Name: iconVaccine.png
Xamarin reference: iconVaccine (as created in Resource.designer.cs, but will fail)
Correct Reference: iconvaccine

Hope that helps!

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.