This workshop will be retired on May 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
Well done!
You have completed Android Widgets!
You have completed Android Widgets!
Preview
In this video we finish the widget!
Related Links
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
We're broadcasting our data to the world,
but is anyone listening?
0:00
Unfortunately, there's not an easy way for
0:04
us to receive this data
in the on update method.
0:06
If we flip over to widget provider,
it's clear that there's no way for
0:09
us to access the intent and
side on update.
0:14
And remember, app widget providers
are just specialized broadcast receivers.
0:17
So, the first step in anything
happening here is a call to on receive
0:22
where we get an intent.
0:26
But, again, it looks like that intent
isn't being passed into on update.
0:28
To solve this issue, we're going to
need to create our own action and
0:34
override on receive to handle it.
0:37
Let's start by creating a new constant
to hold the name of our action.
0:40
So public static final String,
and let's call it TOAST_ACTION.
0:45
And set it equal to your package name,
0:49
dot TOAST_ACTION.
0:55
And now, down in me on update function,
where we set the action for our intent,
1:01
instead of using
appWidgetManager.ACTION_APPWIDGET_UPDATE,
1:07
let's just use our TOAST_ACTION.
1:12
All that's left is overwriting on
receive to handle our new action.
1:15
Let's add a couple lines
below our constants and
1:20
then use control O to override on receive.
1:23
Then let's add a line at the top and
1:27
check if the intent parameter
has an action of toast action.
1:30
So if intent.getAction,
1:34
that equals toast action.
1:39
And if it is a toast action, let's create
a new string to hold the list item,
1:44
string list item, and let's set it
equal to intent.getstringextra and
1:49
pass in our key, key item.
1:56
Finally, let's toast what item this is.
2:00
And to make it easier,
let's pick the create a new toast version.
2:02
And for the second parameter,
lets pass on our new list item stream.
2:07
Now let's run the app and
see what we've got.
2:12
And again, it looks like we need to
drag out new instances of our widget.
2:17
Okay, so we've just added the toasts,
and now when we click on an item,
2:26
we see which item it is
toasting down there.
2:30
But it looks like we've
lost the colors again.
2:34
When we changed our action away from the
normal update action, not only did we gain
2:36
the ability to use our own action, but
we also broke its connection to On Update.
2:40
So we're not going to get any calls
to On Update with our toast action.
2:46
However, what we can do is
just call On Update ourselves
2:50
whenever we receive a toast action.
2:54
Let's add a line below our toast and
then call On Update.
2:58
Then let's pass on our context and
an app widget manager,
3:01
AppWidgetManager.getInstance and
pass in our context.
3:06
And then, since we aren't really using
the appWidgetIds parameter anyway,
3:11
let's just pass it null.
3:15
Now, if we run the app again,
the background changes and
3:17
we get a toast, great work.
3:21
But before I let you go,
3:24
let's quickly look at another way
that we could have solved that.
3:25
Back in the on receive function,
lets delete the on update call,
3:29
and instead let's just set the action for
this intent to the update action,
3:36
intent.setaction App widget
manager.action at widget update.
3:40
Now, when we receive an intent with our
toast action, we'll toast our list item,
3:49
and then change the intense action
to action app widget update.
3:54
Then, when we call super.onreceive,
3:59
it will have an intent that
triggers the on update method.
4:01
And if we run the app just one more time,
it still works.
4:05
Nice.
4:11
Widgets are certainly not the most
straightforward part of Android.
4:14
But at least now you've got
some idea of why that is.
4:17
Not to mention you've also got
a pretty sweet color changing widget.
4:20
And you understand how to add actions to
not only the views in your remote views,
4:24
but also individual list items.
4:28
Now that you've conquered widgets,
4:31
hopefully the rest of Android
will seem a little bit easier.
4:32
And remember, if you ever need help or
4:35
would like to take some time to help
out others, check out the community.
4:37
Until next time.
4:41
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