Download presentation
Presentation is loading. Please wait.
Published byBrittney McDonald Modified over 8 years ago
1
Mobile Programming Lecture 4 Resources, Selection, Activities, Intents
2
Announcement Reminder: o Homework 2 is due this Friday 11:59pm. You need to demo to me in class. o The second deadline is Sunday 11:59pm. You need to demo to me in Monday’s class. o Please export your project (.zip) and email me. Midterm exam is on June 21 st. It is a Friday.
3
Lecture 3 Review Why shouldn't you use Toast to debug? How should you debug?
4
Agenda Referencing @string resources Setters and Getters Selection Views Android Components - Activity Android Components Intents More on the Android Manifest File
5
Referencing @string Resources All @string Resources are stored in res/values/strings.xml You reference them in XML as "@string/string_name"
6
Referencing @string Resources You can also reference them in Java String buttonText = ""; Resources res = getResources(); buttonText = res.getString(R.string.string_name);
7
Referencing Resources You can store an array of strings if you need a collection instead of just a single string. This makes it an @array resource instead of @string resource! Open res/values/strings.xml in Resources view Add... > String Array o enter the name of the string_array, e.g. "countries" Repeat until you've added all values for the collection... o Add... > Item o Enter the name of the item
8
Setters and Getters for Views Most of a View's attributes can be set and get programmatically Example widgetXML attributeset methodget method EditTextandroid:textsetText(String)getText() Buttonandroid:onClick setOnClickListener(On ClickListener) - CheckBoxandroid:checkedsetChecked(Boolean)isChecked() SeekBarandroid:progresssetProgress(int)getProgress() SeekBarandroid:maxsetMax(int)getMax()
9
Selection Widgets - Spinner Similar to a drop-down list android:spinnerMode o "dialog" or "dropdown" android:prompt o e.g. "Select an option" o message to display when the spinner dialog is shown only when android:spinnerMode="dialog" android:entries o e.g. "@array/countries" o populate the spinner using this array
10
Selection Widgets - Spinner Similar to a drop-down list android:prompt o e.g. "Select an option" o message to display when the spinner dialog is shown android:spinnerMode o "dialog" or "dropdown" android:entries o e.g. "@array/countries" o populate the spinner using this array If the list is static, you can again avoid Java by specifying the entries in XML!
11
Selection Widgets - Spinner Similar to a drop-down list android:prompt o e.g. "Select an option" o message to display when the spinner dialog is shown android:spinnerMode o "dialog" or "dropdown" android:entries o e.g. "@array/countries" o populate the spinner using this array If you don't like XML, you can set the entries in Java also.
12
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); }
13
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } This is the Java code. If you choose to do this, then you don't need to set the android:entries attribute
14
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } You should already know what this does.
15
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } Since you don't like XML, to do it programmatically, you need to use an Adapter.
16
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } This is Java stuff. If you don't know what it is, try removing it to see what happens.
17
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } If you have an @array resource already, then create an ArrayAdapter from that resource.
18
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } First argument is of type Context, you can just past the "this" keyword here (because of the state of app)
19
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } This is the resource that you're creating the ArrayAdapter from.
20
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } 3rd argument expects the @id of a TextView.
21
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } android.R gives you resources that exist for use even before you create your app
22
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } So instead of creating and using your own TextView for this purpose, use this one
23
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); mySpinner.setAdapter(adapter); } Attach the Adapter to the Spinner in order to populate the Spinner!
24
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.countries, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(adapter); } Finally, this line of code is not required, but it makes your drop down look pretty.
25
Selection Widgets - Spinner Both ways give you a Spinner which uses predetermined entries How do you populate the Spinner at runtime, with when the entries are also determined at runtime?
26
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); String[] countries = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item, countries); mySpinner.setAdapter(adapter); }
27
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); String[] countries = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item, countries); mySpinner.setAdapter(adapter); } Create and initialize a String array
28
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); String[] countries = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item, countries); mySpinner.setAdapter(adapter); } Create an ArrayAdapter to populate the Spinner with
29
Selection Widgets - Spinner public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.my_spinner); String[] countries = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item, countries); mySpinner.setAdapter(adapter); } 3rd argument accepts a List of Strings
30
Selection Widgets - ListView A ListView is similar to a Spinner they both show the user a list of items they both have the android:entries attribute, so they can both be set using the same @array resource or the same ArrayAdapter
31
Selection Widgets - ListView Adapters are used to provide the data to the ListView object. The adapter also defines how each row is the ListView is displayed. You can use pre-existing layout for each row. You can also define customized layout for each row. Extends BaseAdapter class.
32
Selection Widgets - ListView A ListView is similar to a Spinner with some exceptions, to name a few: A Spinner is normally used for forms, a ListView not so much A Spinner only shows one item at a time A Spinner item can be "selected", a ListView item can be "clicked" or "selected"
33
Selection Widgets - ListView A ListView is similar to a Spinner with some exceptions, to name a few: A Spinner is normally used for forms, a ListView not so much A Spinner only shows one item at a time A Spinner item can be "selected", a ListView item can be "clicked" or "selected" I added this in hindsight. On non-trouch-screen devices it can be selected
34
Events - Spinner OnItemSelected You can set an EventListener for when the user selects an item from the Spinner
35
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } });
36
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); Setter method for setting the EventListener
37
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); Anonymous class
38
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); When an item is selected...,
39
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); You can now reference the actual View (i.e., each entry in Spinner is a TextView)
40
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); The position of the view in the Adapter
41
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); The android:id attribute of the view
42
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); Cast the generic View to a TextView
43
Events - Spinner OnItemSelected mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView parent) { Toast.makeText(getApplicationContext(), "You didn't select anything", Toast.LENGTH_SHORT).show(); } }); Get the android:text value
44
Events - Spinner OnItemSelected Note that this we're using the OnItemSelectedListener instead of the OnItemClickListener for Spinner! If you try to use OnItemClickListener you may get errors Also, note the difference between these two listeners and OnClickListener o OnItemClickListener an entry in the Spinner has been clicked, don't use this o OnClickListener the Spinner has been clicked o OnItemSelectedListener an entry in the Spinner has been selected
45
Events - ListView OnItemClick As mentioned before, a ListView item can be clicked, or selected In that case, you use OnItemClickListener for ListView or OnItemSelected Listener
46
Events - ListView OnItemClick myListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } });
47
Android Application Components So far we've only been working with 1 of the 4 Android components, namely Activity
48
Android Application Components The 4 Android application components are 1.Activity 2.Broadcast Receiver 3.Content Provider 4.Service
49
Activity So far we've only been working with a single Activity Remember, an Activity is a single screen with a user interface Each Activity in an application is independent
50
Activity An Activity is the only Android application component with a UI!
51
Activity In Homework 2, you're creating a form that doesn't do anything after the form is submitted If you want to take the user to a different screen after the form is submitted, you should add a new Activity to your app.
52
Activity To add a new Activity open the AndroidManifest.xml file click on the Application tab at the bottom of the window under the Application Nodes section, click Add... select Activity in the Attributes for Activity section, click on the Name* linkName* Enter the name of your second Activity Finish
53
You can design the UI for your second Activity e.g. add another res/layout/xml_file.xml Now we need to figure out how to launch the second Activity B from the first Activity A Activity
54
Intent An Intent is an abstract description of an operation to be performed You can use it to launch another Activity B from within Activity A using an Intent Activity AActivity B Intent
55
Activity and Intent... public void onClick(View view) { Intent myIntent = new Intent(A.this, B.class); startActivity(intent); }...
56
Activity and Intent... public void onClick(View view) { Intent myIntent = new Intent(A.this, B.class); startActivity(intent); }... The name of the Activity the app is currently running
57
Activity and Intent... public void onClick(View view) { Intent myIntent = new Intent(A.this, B.class); startActivity(intent); }... The name of the Activity that should be launched
58
Activity and Intent... public void onClick(View view) { Intent myIntent = new Intent(A.this, B.class); startActivity(intent); }... Launch Activity B now
59
Activity - Android Manifest File If you added the second Activity B this way, then B will be automatically added to the Android Manifest file If you added it some other way, then Activity B may not be in the Manifest File. This is an easy to get a Force Close when you try to launch Activity B! Android needs to know what Activities your app may launch
60
Activity - ListActivity Sometimes the entire UI for your Activity may be a ListView In this case, you can extend ListActivity instead of extending Activity You don't need a layout.xml file for a ListActivity!
61
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] list = new String[]{"one","two","three"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); }
62
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] list = new String[]{"one","two","three"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } extend ListActivity instead of Activity
63
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] list = new String[]{"one","two","three"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } We don't need to setContentView because we're extending ListActivity
64
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list = new String[]{"one","two","three"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } We don't need to setContentView because we're extending ListActivity
65
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } We've seen this before in this lecture
66
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } We've also seen this before in this lecture
67
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } We call setListAdapter on this ListActivity instead of calling it on a ListView (we don't have a ListView specified in an XML file this time!)
68
Activity - ListActivity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] list = new String[]{"Brazil","China","Denmark"}; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } This is equivalent to calling this.setListAdapter(adapter); i.e., using the this keyword to refer to this instance of MyListActivity
69
References The Busy Coder's Guide to Android Development - Mark Murphy The Busy Coder's Guide to Android Development - Mark Murphy Android Developers The Mobile Lab at Florida State University
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.