This course will be retired on June 1, 2025.
Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
We said that we would plug the reader's name into the story, so let's see how to do it using the String.format() method.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
A while ago we talked about taking
the name that we get from the user, and
0:00
then plugging it directly into our story.
0:03
Let's do that now.
0:05
Instead of just sending the text in the
text view directly from our page object,
0:06
we're going to search for a specific
string, replace it with our user's name.
0:10
So let's create a new string variable
to hold the text of our story.
0:14
String pageText = getString and then we
can get it right from string resources.
0:17
And again, from the page object,
we want to get the Text ID associated for
0:24
the given page.
0:28
We'll use this page text variable
to set the text in our text view.
0:29
But we're going to manipulate
it before we pass it in.
0:33
So the code we're gonna write here is some
simple Java code that you may be familiar
0:35
with from our Java courses.
0:38
But if not, we'll talk it over briefly.
0:39
Basically it's just a search and replace
for that special sequence we saw earlier.
0:41
I'm gonna add a few lines here and
bump my code up.
0:45
And now on a new line type pageText
equals String with a capital s
0:49
.format, then for
the first parameter let's use pageText,
0:54
and for the second parameter
let's pass in the name.
0:59
But wait.
1:02
I don't remember if this
name is available down here.
1:03
We haven't passed it
into our loadPage method.
1:06
And let's see,
up here we're setting it, but
1:08
here's where we declare it
in the onCreate method.
1:11
Let's make this a member variable instead,
that we can access both in here and
1:13
onCreate, and in the loadPage method.
1:17
I'd rather make it a member variable
because we're gonna use the same name in
1:19
a couple of different pages.
1:22
So, I'll just delete string, and then up
here at the top say private String name.
1:24
And now we can set it here,
and use it down here, cool.
1:31
So in this new line of code we are going
to format pageText by passing in the name.
1:36
And then we'll store the reformatted
result back into pageText.
1:41
So we'll work on it here and then we'll
store the result back in this variable.
1:46
Let's take a quick look at
the string documentation for
1:49
Java from the Oracle website.
1:51
So here we have the string class.
1:54
And if we scroll down a little bit
we can go to the method summary, and
1:55
then here we find two
different format methods.
1:59
The first one has a Locale, but
2:02
we just want the second one here that
takes a String and Object parameters.
2:03
This format method is a Static method,
which is why we call it in a from a String
2:07
class, and
not from a specific instance of a String.
2:10
This concept of static versus instance
methods maybe a little confusing,
2:13
based on how familiar you are with Java.
2:17
But static methods like this mean
that we don't need an actual
2:20
instance of a string to call it, which is
why we're able to just use the class name.
2:22
A basic idea here is we can plug in
special characters in our string and
2:26
this method will replace those special
characters when it finds a match
2:29
with whatever arguments we provide.
2:33
So let's click on the format string here,
to see some examples.
2:35
So here, we have a birthday example
with some special placeholders.
2:39
Percent one with a dollar sign and
a specific code which stands for
2:42
month, then day, and
then year in this example.
2:47
So if we go back to our story code,
let's go to our string resources and
2:51
I've already plugged in the appropriate
characters we need for page zero.
2:55
So I'm going to turn on that
soft wrap feature again.
2:59
We click on View,
Active Editor, Use Soft Wraps.
3:01
Now, all the text for page0,
will wrap on the screen.
3:06
And here you can see %1$s.
3:09
%1 is the order number of the parameter.
3:10
We could have multiple parameters but we
only have one, so it's just gonna be %1.
3:15
If we had a second parameter,
for example, it would be %2.
3:19
And then the $s, is just for
a simple string.
3:22
So this will say, "Help me,
user, you're my only hope".
3:26
This same sequence shows up in page5 too,
if we scroll down here,
3:29
we see our favorite android,
and again, we have %1$s.
3:34
So let's go back to the story activity.
3:38
The cool thing about this method
is that if no match is found,
3:40
then the name won't be plugged, which is
why we can call this on every single page.
3:43
So let's add a comment just to clarify.
3:47
Add the name if the placeholder is
included, and it won't add if it's not.
3:50
What else do we need to do here.
3:59
We need to set the text view
with this modified text.
4:01
On the next line type
storyTextView.setText, that's the method
4:04
to set this text of course, and we can
pass in the newly formatted pageText.
4:10
We also need to set the text for
each button.
4:15
That's easy enough.
4:18
On a new line,
type choice1Button.setText, and
4:19
then we can pass in the string
ID as the parameter here,
4:24
page.getChoice1().getTextId().
4:27
Notice that setText is
overloaded on these widgets.
4:32
So the first one, takes an actual string,
4:37
and the second one here,
takes the ID of a string resource.
4:39
Let's do the same thing for choice2Button.
4:43
setText(page.getChoice2().getTextId(), and
finish it off.
4:45
Right, let's run this, and
we should be able to see all four
4:54
of the elements on our screen
with the appropriate page0 text.
4:57
There it loads, I enter my name,
start my adventure and
5:00
we've got it all here and check it out
there's my name showing up in the story.
5:04
All right.
5:11
We should also verify that our scroll
view is working by running this on
5:12
emulator with a smaller screen size.
5:16
So back here in Android studio,
we're gonna stop the current process.
5:18
And I am gonna click on AVD Manager.
5:21
I currently don't have an emulator
with a smaller screen, so
5:24
I am gonna Create a New Virtual Device,
and
5:27
I'll take the Nexus One simply because it
has the smallest screen size on my list.
5:29
I'm running the X86 version of the
emulator, I'll pick Nougat, and hit Next.
5:34
Finish this, and now what I want to do is
start it, and when I run the app again,
5:39
I'll make sure I go into this
emulator instead of the Pixel.
5:44
All right my emulator just finished,
I'm gonna close this and
5:46
now if I click run I
can pick the Nexus One.
5:50
I'm only gonna do this one time, though,
so I'm going to uncheck this and
5:53
I'll put it back on the Pixel.
5:56
All right, so
this fits okay on the small screen.
5:58
Type my name, start the adventure, and now
you can see that the text is running down.
6:02
And if we scroll up we can
read the rest of it, and
6:07
sure enough, our name still shows up.
6:10
Cool.
All right just like we want it,
6:12
the scroll view is scrolling
both the image and
6:13
the text view while the buttons remain
in place at the bottom of the screen.
6:16
Very nice.
6:19
All right, so we have successfully
loaded some story data into our view and
6:21
we've got the scroll view
working just like we wanted to.
6:25
Coming up in the next section, we'll
get the rest of the story working, and
6:27
we'll also take a look at how to
properly navigate within an Android App.
6:31
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up