Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialKevin Faust
15,353 Pointswhy do we put "context" in front of getString?
Hi
when setting our title, message, and button text, we used context.getString(R.string."locationstuffhere")
I omitted the context part and the code ran fine. I also remember we usually just use getString(R.string."stuff") so im just curious what the context part is doing
Thank you
1 Answer
Seth Kroger
56,413 PointsI believe it is because it is an automatic refactoring by Android Studio. It replaces the String with Context's getString() method. Your AlertDialogFragment class isn't a descendant of Context so it needs one to call that particular getString method. However, your class is descended from Fragment that has its own getString method. When you leave context off you are using that one instead.
Gavin Ralston
28,770 PointsGavin Ralston
28,770 PointsNot sure I'm following this. Now there's likely been a few changes in Android Studio in the last few months, but I'm trying to follow your answer as closely as I can. Here's the code generated in Android Studio 1.5. No context.getString() auto-generated:
So where I'm not following your answer is... why would I care what object I'm calling getString() from when I can count on res > values > string.xml (R.string.xxxx) to contain whatever string I want? (assuming it's valid)
Additionally, why would I want a Context to be the object I'd call getString from in order to generate a string from res/strings.xml to pass into another method on another object?
Would there be some point in app development where the Context would be an activity from an entirely different app with its own resources?
It seems accessing the R.string.whatever_value property directly, as it currently does in Android Studio 1.5 is the right choice, since I'm just looking to plug a string into a method call. And my tiny brain can't fathom why I'd want to wrap a Context.getString() around directly accessing a member of R, when that direct access produces exactly what I want.
Help appreciated.
Matthew Almeida
1,224 PointsMatthew Almeida
1,224 PointsI found this odd too. I thought that perhaps the instructor was using an earlier version of the Android API but it looks like both versions of .setTitle (accepting a charsequence or a resource ID https://developer.android.com/reference/android/app/AlertDialog.Builder.html#setTitle(java.lang.CharSequence)) were added in API level 1.
I'm curious if this is just a personal style and preference issue or if there is any added benefit to using context.getString() over the AlertControllers internal mContext.getText().