Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mobile Programming Lecture 7 Dialogs, Menus, and SharedPreferences.

Similar presentations


Presentation on theme: "Mobile Programming Lecture 7 Dialogs, Menus, and SharedPreferences."— Presentation transcript:

1 Mobile Programming Lecture 7 Dialogs, Menus, and SharedPreferences

2 Agenda Dialogs Menus SharedPreferences

3 Android Application Components 1. Activity 2. Broadcast Receiver 3. Content Provider 4. Service

4 Dialogs A dialog is a small window that appears in front of the current Activity It causes the Activity to lose focus Used for ProgressBars, Alerts, etc

5 Dialogs onCreateDialog() is called the first time. onPrepareDialog is called every time its opened. o without this, it will remain the same as the first time it was opened

6 Dialogs - AlertDialog an AlertDialog is an extension of the Dialog class it is capable of constructing most dialog user interfaces and is the suggested dialog type

7 Dialogs - AlertDialog you should use it for dialogs that use any of the following features o a title o a text message o one, two, or three buttons o a list of selectable items (with optional checkboxes or radio buttons)

8 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; }

9 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } Nothing special here, just an int I use to identify the dialog, because we can have more than one

10 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } Override this method of Activity, which is called when you want to show any dialog of the Activity

11 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } Switch because we can have more than one dialog, meaning we need to check the dialog id

12 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } If you want an AlertDialog, you need to build one first

13 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } Give the user a message

14 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } If true, then the user can press the back button to dismiss the dialog. false would force the user to make an action on the dialog.

15 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } Add a button, AND set a listener for when the button is pressed. This is should be the "positive" button, e.g. "Yes", "Absolutely!"

16 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } This is the listener for then the "positive" button is pressed, so you should take some kind of action.

17 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } The Dialog isn't created until you call create()

18 Dialogs - Creating an AlertDialog public class MyDialogs extends Activity { static final int DIALOG_EXIT_ID = 1; @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case DIALOG_EXIT_ID: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to exit?"); builder.setCancelable(true); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { AlertDialogExample.this.finish(); } }); dialog = builder.create(); break; } return dialog; } The type of this method is Dialog, so here we return... the Dialog!

19 Dialogs - AlertDialog You can add up to 3 buttons on the AlertDialog by calling 1.dialog.setPositiveButton() o we just used this one in the previous slides 2.dialog.setNegativeButton() o "No", "Cancel" 3.dialog.setNeutralButton() o "Remind me Later"

20 Dialogs - Showing a Dialog To show a Dialog on the screen, simply call o showDialog(int) from within your Activity. It takes as parameter the ID of the dialog. You can also call it from within an anonymous inner class Make sure you override the onCreateDialog() method in that Activity!

21 Dialogs - Showing a Dialog See AlertDialogExampleAlertDialogExample

22 Dialogs - Dismissing a Dialog You don't want to show the Dialog to the user forever! You have to allow the user to close the dialog somehow, even if it's not cancelable You can dismiss the Dialog by calling o dismissDialog(int) from within the controlling Activity where the argument is the Dialog ID o dismiss() on the Dialog object  e.g. dialog.dismiss()

23 Dialogs - Showing a Dialog See DismissDialogExampleDismissDialogExample

24 Dialogs - AlertDialog with a List Not only buttons! You can also add a list to your AlertDialog

25 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); }

26 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } We will use this String array for our list

27 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } This is a method in an Activity class, as in the previous example

28 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } We're still using an AlertDialog Builder

29 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } This time we call setItems()!

30 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } First argument should be your list of items

31 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } There is more than one OnClickListener class!

32 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } If you want to use both View.OnclickListener (for buttons) and DialogInterface.OnClickListener (for Dialogs), then you need to be more specific here

33 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } When an item in the list is clicked, Android kindly provides you with the Dialog object itself, as well as the index of the clicked item

34 Dialogs - AlertDialog with a List String[] countries = new String[]{"Netherlands", "USA", "St. Martin", "Curacao"}; @Override public Dialog onCreateDialog(int id) { Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select a Country"); builder.setItems(countries, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int index) { Toast.makeText(getApplicationContext(), "You selected " + countries[index], Toast.LENGTH_LONG).show();} }); return builder.create(); } Let's not forget to create the Dialog and return it

35 Dialogs - AlertDialog with a List See AlertDialogListExampleAlertDialogListExample

36 Dialogs - Date/TimePicker Dialogs See DatePickerDialogExampleDatePickerDialogExample

37 Dialogs - Custom Dialogs - SeekBar You can create your own Dialog if the standard Android Dialogs are not suitable for your needs For example, there is no SeekBar Dialog, but you can create your own See CustomDialogExampleCustomDialogExample

38 Dialogs - DialogFragment creating Dialogs by using the onCreateDialog() method of an Activity is old school creating Dialogs by using a DialogFragment is new school

39 Dialogs - DialogFragment DialogFragment also has an onCreateDialog() callback method! o i.e., both an Activity and a DialogFragment have an onCreateDialog() callback method

40 Dialogs - DialogFragment DialogFragment is slightly different than the other Fragments we've seen so far We don't need to add it to the XML Nor do we need to add it to the UI using a FragmentTransaction

41 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); }

42 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Let's create our Activity first...

43 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Let's show the Dialog when this Button is clicked!

44 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } The Button was just clicked at this point, so let's create a new instance of MyDialogFragment, which we will see in a few slides

45 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Just call.show() on the Fragment! This time we didn't need to use the FragmentTransaction to add the Fragment

46 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Just pass the FragmentManager and it will take care of adding and removing the Fragment for you

47 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Second argument is the tag that you want to assign to the Fragment

48 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } We will get back to this!

49 Dialogs - DialogFragment Let's take a look at our DialogFragment

50 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); }

51 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } DialogFragment!

52 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } Dialog also has an onCreateDialog(), the proof is in the @Override

53 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } This is how we get the Context from within a Fragment, remember!?

54 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } We need to return a Dialog!

55 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } You've seen this other stuff before!

56 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } The button in the Dialog has now been clicked! What do we do next?

57 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } Let's get a handle on the Activity containing this Fragment

58 Dialogs - DialogFragment public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("This is a DialogFragment!"); builder.setPositiveButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity act= (MyActivity) getActivity(); act.doPositiveClick(); } }); return builder.create(); } Let's call our own custom method, doPositiveClick() on the Activity

59 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Which takes us back here, back to our Activity.

60 Dialogs - DialogFragment public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialogFragment f = new MyDialogFragment(); f.show(getFragmentManager(), "dialog"); } }); } public void doPositiveClick() { Toast.makeText(this, "doPositiveClick()", Toast.LENGTH_LONG).show(); } Simply make a Toast as evidence that we were successful

61 Dialogs - DialogFragment Note that we don't need to override onCreateView() or onActivityCreated() methods of a DialogFragment You may choose to override onCreateView() and return a View if you want to create some custom Dialog without using onCreateDialog() I'll leave it up to the Android developer's website to explain it if anyone is interested in doing soAndroid developer's website

62 Dialogs - DialogFragment See FragmentDialogExample

63 Menu Options In Android 2.3.x and below, clicking on the dedicated Menu button allows the user to reveal menu options In Android 3.0 and above, the options menu is presented by way of an action bar o the dedicated Menu button is deprecated and some devices just do not have one

64 Menu Options - Creating one <= 2.3.x Right click on your project > New > Other... Select Android XML File In the Resource Type drop down list, select Menu Enter a File name and click Finish Click Add... > Item Edit the id as appropriate, and enter the Title Repeat to add additional menu options

65 Menu Options - Creating one <= 2.3.x We will use this Menu XML file, main_menu.xml, for our example <item android:id="@+id/set_text" android:title="@string/set_text_opt"/> <item android:id="@+id/close" android:title="@string/close_opt" />

66 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; }

67 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } Override this Activity method

68 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } Similar to a LayoutInflater, but for Menus instead

69 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } Show the Menu now

70 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } This is the Menu XML file that we created previously

71 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } This is given as argument to onCreateOptionsMenu, so use it as argument to inflate the menu

72 Menu Options - Creating one <= 2.3.x @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } Return true if you want the menu to be displayed, false if you don't

73 Menu Options - Creating one <= 2.3.x This is enough for the Menu to be displayed on the screen when the user presses the Menu button If you want to take action after an option is selected, then you need to override the onOptionsItemSelected() method of Activity

74 Menu Options - Creating one <= 2.3.x @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.set_text: TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("First Option Selected!"); break; case R.id.close: Toast.makeText(this, "Goodbye!", Toast.LENGTH_LONG).show(); finish(); break; } return true; }

75 Menu Options - Creating one <= 2.3.x @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.set_text: TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("First Option Selected!"); break; case R.id.close: Toast.makeText(this, "Goodbye!", Toast.LENGTH_LONG).show(); finish(); break; } return true; } We override this method of Activity

76 Menu Options - Creating one <= 2.3.x @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.set_text: TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("First Option Selected!"); break; case R.id.close: Toast.makeText(this, "Goodbye!", Toast.LENGTH_LONG).show(); finish(); break; } return true; } Which menu item was selected?

77 Menu Options - Creating one <= 2.3.x @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.set_text: TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("First Option Selected!"); break; case R.id.close: Toast.makeText(this, "Goodbye!", Toast.LENGTH_LONG).show(); finish(); break; } return true; } Here we just changed the text of a TextView when the item R.id.set_text is selected

78 Menu Options - Creating one <= 2.3.x @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.set_text: TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("First Option Selected!"); break; case R.id.close: Toast.makeText(this, "Goodbye!", Toast.LENGTH_LONG).show(); finish(); break; } return true; } Here we close our app when item R.id.close is selected

79 Menu Options - Creating one <= 2.3.x See MenuOptionsExampleMenuOptionsExample

80 Menu Options - Creating one <= 2.3.x You can change the menu options that show up at runtime

81 Menu Options - Creating one >= 3.0 For Android 3.0 and higher... http://developer.android.com/guide/topics/ui/actionbar.html

82 Context Menu A context menu is a floating menu that appears when the user performs a long-click on an element. It provides actions that affect the selected content.floating menu You can provide a context menu for any view, but they are most often used for items in a o ListView ListView o other view collections in which the user can perform direct actions on each item.

83 Context Menu - Creating one When creating a Context Menu, you can create a Menu XML file in the same way you do for an Options Menu

84 Context Menu - Creating one We will use the following XML file for our example

85 Context Menu - Creating one We will use the following XML file for our example All of the callback methods in this example are declared within our ListActivity

86 Context Menu - Creating one As a reminder, a ListActivity extends Activity it already has a ListView, so you don't need to add one the the Layout XML file o you don't even need to use a Layout XML File o which means you don't need to call setContentView() You can get a handle on the ListView by simply calling getListView().

87 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setListAdapter(new ArrayAdapter (this, android.R.layout.simple_list_item_1, entries)); registerForContextMenu(getListView()); }...

88 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setListAdapter(new ArrayAdapter (this, android.R.layout.simple_list_item_1, entries)); registerForContextMenu(getListView()); }... We will use this String array to populate our List

89 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setListAdapter(new ArrayAdapter (this, android.R.layout.simple_list_item_1, entries)); registerForContextMenu(getListView()); }... Populate the ListView here

90 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setListAdapter(new ArrayAdapter (this, android.R.layout.simple_list_item_1, entries)); registerForContextMenu(getListView()); }... Register the ListView with a Context Menu, now the menu will show up when you long press on the ListView

91 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"};... @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }... onCreate() from previous slide is here

92 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"};... @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }... Override this method. It is called when the Context Menu for View v is being built

93 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"};... @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }... You've seen this before

94 Context Menu - Creating one public class ContextMenuExample extends ListActivity { String[] entries = new String[]{"Martin","Anderson","Junior","George","Dan"};... @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }... onContextItemSelected() on the next slide goes here

95 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } Override this method of Activity

96 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } This Object has information about the Context Menu, NOT the item in the List

97 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } This Object will have information about the item pressed

98 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } We can get a handle on the item in the ListView by using info.position

99 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } info.position tells us which item was pressed, this is how we tell which Menu Item was pressed

100 Context Menu - Creating one @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); TextView tv = (TextView) getListView().getAdapter().getView(info.position, null, null); switch(item.getItemId()) { case R.id.edit_option: /* Edit option selected */ break; case R.id.share_option: /* Share option selected */ break; case R.id.delete_option: /* Edit option selected */ break; } return true; } By combining info.position and item.getItemId(), we know the action needs to be performed on the item

101 Context Menu - Creating one See ContextMenuExampleContextMenuExample

102 Preferences - SharedPreferences SharedPreferences is 1 of the 5 methods for Data Storage in Android Internal and external storage, remote server, and local database. http://developer.android.com/guide/topics/data/data-storage.html It stores primitive key-value pairs of primitive data types o boolean, int, float, long, String Data persists even if your app has been fully terminated SharedPreferences are only available to app that created them!

103 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); }

104 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } The desired name of your SharedPreferences file

105 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } You can get a SharedPreferences file by name by calling this method

106 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } The second argument is the modemode

107 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } If the SharedPreferences file doesn't exist at this point, it will be created for you

108 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } Try to get the boolean value "silentMode", "silentMode" is the key. You decide on the name of the key. "silentMode" is not a keyword here

109 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } If the key doesn't exist (could be because the file was just created in the previous line of code), then this will be the value returned

110 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } An imaginary method that you created to change the volume setting of the device to silent

111 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } We want data to persist even after the app has been terminated, so let's Override onStop()

112 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } Get a handle on our SharedPreferences again, which should have the "silentMode" value set at this point

113 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } If we want to modify the SharedPreferences, we need to use a SharedPreferences Editor

114 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } Let's set the value value of silentMode to the imaginary boolean value mSilentMode

115 Preferences - SharedPreferences public class SharedPrefsExample extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); editor.commit(); } Don't forget to save your changes to the file!

116 Preferences - SharedPreferences See SharedPrefsExampleSharedPrefsExample

117 Preferences - PreferenceActivity If you want to provide the user with a UI for changing preferences, you can use a PreferenceActivity in combination with SharedPreferences To create a PreferenceActivity, first create a Preference XML file

118 Preferences - PreferenceActivity File > New > Other > Android XML File Resource Type: Preference Enter the file name, e.g. preferences.xml Root Element: PreferenceScreen Click Add to add various types of Preferences o e.g. EditText Expand the Attributes on the right to edit the attributes for your preferences

119 Preferences - PreferenceActivity We will use this preferences.xml file for our example

120 Preferences - PreferenceActivity Creating a PreferenceActivity is easy!

121 Preferences - PreferenceActivity public class Preferences extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); }

122 Preferences - PreferenceActivity public class Preferences extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } Extend PreferenceActivity

123 Preferences - PreferenceActivity public class Preferences extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } From the preferences.xml file we added previously

124 Preferences - PreferenceActivity In your main Activity, you can get the Preferences without specifying the name of the XML file

125 Preferences - PreferenceActivity public class MainActivity extends Activity { SharedPreferences mPrefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String username = mPrefs.getString("username","None"); }

126 Preferences - PreferenceActivity public class MainActivity extends Activity { SharedPreferences mPrefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String username = mPrefs.getString("username","None"); } This will allow you to access the preference settings, even if you have more than one preference XML file associated with a PreferenceActivity

127 Preferences - PreferenceActivity public class MainActivity extends Activity { SharedPreferences mPrefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String username = mPrefs.getString("username","None"); } These preferences will automatically save when the user interacts with them!

128 Preferences - PreferenceActivity See PreferenceActivityExamplePreferenceActivityExample

129 Preferences - PreferenceActivity You can also add a Listener for when a Preference has been changed When a Preference is changed, you may need to update certain values tied to these Preferences

130 Preferences - PreferenceFragment Android 3.0 and higher PreferenceFragment

131 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


Download ppt "Mobile Programming Lecture 7 Dialogs, Menus, and SharedPreferences."

Similar presentations


Ads by Google