From c88f13e0cbf16793009a7e8e62b6517c835ed6cb Mon Sep 17 00:00:00 2001 From: Tom O'Neill Date: Thu, 17 Dec 2009 12:24:05 -0800 Subject: [PATCH] Update Notepad tutorial documentation to match code Some recent CLs to the Notepad source files fixed a couple of bugs in the code: http://b/issue?id=2266994 http://b/issue?id=2266962 This CL includes the newly corrected code in the zip file that developers download. The zip file was generated as follows: cd development/tutorials zip -r /tmp/NotepadCodeLab NotepadCodeLab -x \*Android.mk This CL also updates the documentation to match the new version of the code. Thus the code the users generate will include the bug fix. --- .../notepad/codelab/NotepadCodeLab.zip | Bin 90916 -> 88600 bytes .../tutorials/notepad/notepad-ex2.jd | 110 +++++++++--------- .../tutorials/notepad/notepad-ex3.jd | 83 +++++++------ 3 files changed, 101 insertions(+), 92 deletions(-) diff --git a/docs/html/resources/tutorials/notepad/codelab/NotepadCodeLab.zip b/docs/html/resources/tutorials/notepad/codelab/NotepadCodeLab.zip index 24fefc1a31fba645c4f066b31a00ddcdda7c505d..502a326c3c1faa4341a1efb8df1c15d33640b678 100644 GIT binary patch literal 88600 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 Ze$SvVfctX@2rIxp9dv-m(Yet-Y~ literal 90916 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 z32In this exercise, you will add a second Activity to your notepad application, to let the user -create and edit notes. You will also allow the user to delete existing notes through a context menu. +create and edit notes. You will also allow the user to delete existing notes through a context menu. The new Activity assumes responsibility for creating new notes by collecting user input and packing it into a return Bundle provided by the intent. This exercise demonstrates:

@@ -55,7 +55,7 @@ Tools > Fix Project Properties.

  • There are also a couple of new overridden methods - (onCreateContextMenu(), onContextItemSelected(), + (onCreateContextMenu(), onContextItemSelected(), onListItemClick() and onActivityResult()) which we will be filling in below.
  • @@ -75,7 +75,7 @@ Open the Notepadv2 class.

    1. In order for each list item in the ListView to register for the context menu, we call - registerForContextMenu() and pass it our ListView. So, at the very end of + registerForContextMenu() and pass it our ListView. So, at the very end of the onCreate() method add this line:
      registerForContextMenu(getListView());

      Because our Activity extends the ListActivity class, getListView() will return us @@ -91,7 +91,7 @@ public boolean onCreateContextMenu(Menu menu, View v super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, DELETE_ID, 0, R.string.menu_delete); } -

      The onCreateContextMenu() callback some passes other information in addition to the Menu object, +

      The onCreateContextMenu() callback passes some other information in addition to the Menu object, such as the View that has been triggered for the menu and an extra object that may contain additional information about the object selected. However, we don't care about these here, because we only have one kind of object in the Activity that uses context menus. In the next @@ -102,7 +102,7 @@ public boolean onCreateContextMenu(Menu menu, View v

      Step 3

      Now that the we've registered our ListView for a context menu and defined our context menu item, we need to handle the callback when it is selected. For this, we need to identify the list ID of the - selected item, then delete it. So fill in the + selected item, then delete it. So fill in the onContextItemSelected() method like this:

       public boolean onContextItemSelected(MenuItem item) {
      @@ -127,15 +127,15 @@ can now be deleted.

      margin-bottom:.5em;margin-top:1em;padding:0em;width:240px;">

      Starting Other Activities

      -

      In this example our Intent uses a class name specifically. - As well as - starting intents in - classes we already know about, be they in our own application or another - application, we can also create Intents without knowing exactly which + As well as + starting intents in + classes we already know about, be they in our own application or another + application, we can also create Intents without knowing exactly which application will handle it.

      -

      For example, we might want to open a page in a +

      For example, we might want to open a page in a browser, and for this we still use an Intent. But instead of specifying a class to handle it, we use a predefined Intent constant, and a content URI that describes what we @@ -155,7 +155,7 @@ startActivityForResult(i, ACTIVITY_CREATE);

      NoteEdit. Since the Intent class will need to communicate with the Android operating system to route requests, we also have to provide a Context (this).

      The startActivityForResult() method fires the Intent in a way that causes a method - in our Activity to be called when the new Activity is completed. The method in our Activity + in our Activity to be called when the new Activity is completed. The method in our Activity that receives the callback is called onActivityResult() and we will implement it in a later step. The other way to call an Activity is using startActivity() but this is a "fire-and-forget" way @@ -164,7 +164,7 @@ startActivityForResult(i, ACTIVITY_CREATE);

      Don't worry about the fact that NoteEdit doesn't exist yet, we will fix that soon.

    2. - +

      Step 5

      @@ -180,7 +180,7 @@ startActivityForResult(i, ACTIVITY_CREATE); interested in is the position that the user selected. We use this to get the data from the correct row, and bundle it up to send to the NoteEdit Activity.

      -

      In our implementation of the callback, the method creates an +

      In our implementation of the callback, the method creates an Intent to edit the note using the NoteEdit class. It then adds data into the extras Bundle of the Intent, which will be passed to the called Activity. We use it @@ -207,7 +207,7 @@ startActivityForResult(i, ACTIVITY_EDIT);

    3. The details of the note are pulled out from our query Cursor, which we move to the - proper position for the element that was selected in the list, with + proper position for the element that was selected in the list, with the moveToPosition() method.
    4. With the extras added to the Intent, we invoke the Intent on the NoteEdit class by passing startActivityForResult() @@ -219,7 +219,7 @@ startActivityForResult(i, ACTIVITY_EDIT); variable is much more efficient than accessing a field in the Dalvik VM, so by doing this we make only one access to the field, and five accesses to the local variable, making the routine much more efficient. It is recommended that you use this optimization when possible.

      - +

      Step 6

      @@ -243,7 +243,7 @@ startActivityForResult(i, ACTIVITY_EDIT);
    5. intent — this is an Intent created by the Activity returning results. It can be used to return data in the Intent "extras."
    6. - +

      The combination of startActivityForResult() and onActivityResult() can be thought of as an asynchronous RPC (remote procedure call) and forms the recommended way for an Activity to invoke @@ -277,7 +277,7 @@ case ACTIVITY_EDIT: ACTIVITY_EDIT activity results in this method.

    7. - In the case of a create, we pull the title and body from the extras (retrieved from the + In the case of a create, we pull the title and body from the extras (retrieved from the returned Intent) and use them to create a new note.
    8. @@ -288,7 +288,7 @@ case ACTIVITY_EDIT: fillData() at the end ensures everything is up to date .
    9. - +

      Step 7

      @@ -305,8 +305,8 @@ case ACTIVITY_EDIT: good UI is part art and part science, and the rest is work. Mastery of Declaring Layout is an essential part of creating a good looking Android application.

      -

      Take a look at the +

      Take a look at the Hello Views for some example layouts and how to use them. The ApiDemos sample project is also a great resource from which to learn how to create different layouts.

      @@ -335,7 +335,7 @@ case ACTIVITY_EDIT: layout_weight specified, so it takes up the minimum space required to render. If the layout_weight of each of the two text edit elements is set to 1, the remaining width in the parent layout will - be split equally between them (because we claim they are equally important). + be split equally between them (because we claim they are equally important). If the first one has a layout_weight of 1 and the second has a layout_weight of 2, then one third of the remaining space will be given to the first, and two thirds to the @@ -373,7 +373,7 @@ case ACTIVITY_EDIT: onCreate(Bundle) — and check the box next to it.
    10. Click OK.

      The method should now appear in your class.

    - +

    Step 9

    Fill in the body of the onCreate() method for NoteEdit.

    @@ -388,7 +388,7 @@ case ACTIVITY_EDIT:

    We can then unbundle the values that were passed in to the Activity with the extras Bundle attached to the calling Intent. We'll use them to pre-populate the title and body text edit views so that the user can edit them. - Then we will grab and store the mRowId so we can keep + Then we will grab and store the mRowId so we can keep track of what note the user is editing.

      @@ -406,14 +406,14 @@ case ACTIVITY_EDIT: mTitleText = (EditText) findViewById(R.id.title); mBodyText = (EditText) findViewById(R.id.body); Button confirmButton = (Button) findViewById(R.id.confirm); -

      Note that mTitleText and mBodyText are member +

      Note that mTitleText and mBodyText are member fields (you need to declare them at the top of the class definition).

    1. At the top of the class, declare a Long mRowId private field to store the current mRowId being edited (if any).
    2. -
    3. Continuing inside onCreate(), - add code to initialize the title, body and +
    4. Continuing inside onCreate(), + add code to initialize the title, body and mRowId from the extras Bundle in the Intent (if it is present):
      @@ -423,7 +423,7 @@ if (extras != null) {
           String title = extras.getString(NotesDbAdapter.KEY_TITLE);
           String body = extras.getString(NotesDbAdapter.KEY_BODY);
           mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
      -           
      +
           if (title != null) {
               mTitleText.setText(title);
           }
      @@ -459,16 +459,16 @@ if (extras != null) {
       confirmButton.setOnClickListener(new View.OnClickListener() {
       
           public void onClick(View view) {
      -               
      +
           }
      -           
      +
       });

    Step 10

    Fill in the body of the onClick() method of the OnClickListener created in the last step.

    - +

    This is the code that will be run when the user clicks on the confirm button. We want this to grab the title and body text from the edit text fields, and put them into the return Bundle so that they can be passed @@ -483,7 +483,7 @@ confirmButton.setOnClickListener(new View.OnClickListener() { constants defined in Notepadv2 as keys:

     Bundle bundle = new Bundle();
    -      
    +
     bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString());
     bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString());
     if (mRowId != null) {
    @@ -498,7 +498,7 @@ mIntent.putExtras(bundle);
     setResult(RESULT_OK, mIntent);
     finish();
      -
    • The Intent is simply our data carrier that carries our Bundle +
    • The Intent is simply our data carrier that carries our Bundle (with the title, body and mRowId).
    • The setResult() method is used to set the result code and return Intent to be passed back to the @@ -521,19 +521,19 @@ private Long mRowId; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.note_edit); - + mTitleText = (EditText) findViewById(R.id.title); mBodyText = (EditText) findViewById(R.id.body); - + Button confirmButton = (Button) findViewById(R.id.confirm); - + mRowId = null; Bundle extras = getIntent().getExtras(); if (extras != null) { String title = extras.getString(NotesDbAdapter.KEY_TITLE); String body = extras.getString(NotesDbAdapter.KEY_BODY); mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID); - + if (title != null) { mTitleText.setText(title); } @@ -541,12 +541,12 @@ protected void onCreate(Bundle savedInstanceState) { mBodyText.setText(body); } } - + confirmButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Bundle bundle = new Bundle(); - + bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString()); bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString()); if (mRowId != null) { @@ -562,7 +562,7 @@ protected void onCreate(Bundle savedInstanceState) { }
    • - +

      Step 11

      +

      Finally, the new Activity has to be defined in the manifest file:

      Before the new Activity can be seen by Android, it needs its own @@ -597,10 +597,10 @@ protected void onCreate(Bundle savedInstanceState) {

    • Click the Application tab at the bottom of the Manifest editor.
    • Click Add... in the Application Nodes section. -

      If you see a dialog with radiobuttons at the top, select the top radio button: +

      If you see a dialog with radiobuttons at the top, select the top radio button: "Create a new element at the top level, in Application".

    • Make sure "(A) Activity" is selected in the selection pane of the dialog, and click OK.
    • -
    • Click on the new "Activity" node, in the Application Nodes section, then +
    • Click on the new "Activity" node, in the Application Nodes section, then type .NoteEdit into the Name* field to the right. Press Return/Enter.
    • @@ -608,28 +608,28 @@ protected void onCreate(Bundle savedInstanceState) { file, have a look around at some of the other options available (but be careful not to select them otherwise they will be added to your Manifest). This editor should help you understand and alter the AndroidManifest.xml file as you move on to more advanced Android applications.

      - +

      If you prefer to edit this file directly, simply open the AndroidManifest.xml file and look at the source (use the AndroidManifest.xml tab in the eclipse editor to see the source code directly). Then edit the file as follows:
      - <activity android:name=".NoteEdit"></activity>

      + <activity android:name=".NoteEdit" />

      This should be placed just below the line that reads:
      </activity> for the .Notepadv2 activity.

      Step 12

      Now Run it!

      -

      You should now be able to add real notes from -the menu, as well as delete an existing one. Notice that in order to delete, you must +

      You should now be able to add real notes from +the menu, as well as delete an existing one. Notice that in order to delete, you must first use the directional controls on the device to highlight the note. -Furthermore, selecting a note title from the list should bring up the note -editor to let you edit it. Press confirm when finished to save the changes +Furthermore, selecting a note title from the list should bring up the note +editor to let you edit it. Press confirm when finished to save the changes back to the database.

      Solution and Next Steps

      -

      You can see the solution to this exercise in Notepadv2Solution +

      You can see the solution to this exercise in Notepadv2Solution from the zip file to compare with your own.

      Now try editing a note, and then hitting the back button on the emulator instead of the confirm button (the back button is below the menu button). You diff --git a/docs/html/resources/tutorials/notepad/notepad-ex3.jd b/docs/html/resources/tutorials/notepad/notepad-ex3.jd index 8737280cceae7..2da113ffec396 100644 --- a/docs/html/resources/tutorials/notepad/notepad-ex3.jd +++ b/docs/html/resources/tutorials/notepad/notepad-ex3.jd @@ -36,7 +36,7 @@ notes.

      1. Remove the code in NoteEdit that parses the title and body - from the extras Bundle. + from the extras Bundle.

        Instead, we are going to use the DBHelper class to access the notes from the database directly. All we need passed into the NoteEdit Activity is a mRowId (but only if we are editing, if creating we pass @@ -57,7 +57,7 @@ if (body != null) { }

      - +

      Step 2

      Create a class field for a NotesDbAdapter at the top of the NoteEdit class:

      @@ -67,11 +67,11 @@ if (body != null) {
           mDbHelper = new NotesDbAdapter(this);
          mDbHelper.open();
      - +

      Step 3

      In NoteEdit, we need to check the savedInstanceState for the -mRowId, in case the note +mRowId, in case the note editing contains a saved state in the Bundle, which we should recover (this would happen if our Activity lost focus and then restarted).

        @@ -87,11 +87,11 @@ if (body != null) { with this:
        -        mRowId = savedInstanceState != null ? savedInstanceState.getLong(NotesDbAdapter.KEY_ROWID) 
        -                                            : null;
        +        mRowId = (savedInstanceState == null) ? null :
        +            (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
                 if (mRowId == null) {
        -            Bundle extras = getIntent().getExtras();            
        -            mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) 
        +            Bundle extras = getIntent().getExtras();
        +            mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                             : null;
                 }
                 
        @@ -100,10 +100,15 @@ if (body != null) { Note the null check for savedInstanceState, and we still need to load up mRowId from the extras Bundle if it is not provided by the savedInstanceState. This is a ternary operator shorthand - to safely either use the value or null if it is not present. + to safely either use the value or null if it is not present. + +
      1. + Note the use of Bundle.getSerializable() instead of + Bundle.getLong(). The latter encoding returns a long primitive and + so can not be used to represent the case when mRowId is null.
      - +

      Step 4

      Next, we need to populate the fields based on the mRowId if we @@ -126,38 +131,38 @@ public void onClick(View view) { }

      We will take care of storing the updates or new notes in the database ourselves, using the life-cycle methods.

      - +

      The whole onCreate() method should now look like this:

       super.onCreate(savedInstanceState);
      - 
      +
       mDbHelper = new NotesDbAdapter(this);
       mDbHelper.open();
      - 
      +
       setContentView(R.layout.note_edit);
      - 
      +
       mTitleText = (EditText) findViewById(R.id.title);
       mBodyText = (EditText) findViewById(R.id.body);
      - 
      +
       Button confirmButton = (Button) findViewById(R.id.confirm);
      - 
      -mRowId = savedInstanceState != null ? savedInstanceState.getLong(NotesDbAdapter.KEY_ROWID) 
      -                                    : null;
      +
      +mRowId = (savedInstanceState == null) ? null :
      +    (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
       if (mRowId == null) {
           Bundle extras = getIntent().getExtras();
      -    mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) 
      +    mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                   : null;
       }
      - 
      +
       populateFields();
      - 
      +
       confirmButton.setOnClickListener(new View.OnClickListener() {
       
           public void onClick(View view) {
               setResult(RESULT_OK);
               finish();
           }
      -     
      +
       });

      Step 6

      @@ -180,7 +185,7 @@ is an Android convenience method provided to take care of the Cursor life-cycle. and re-create resources as dictated by the Activity life-cycle, so we don't need to worry about doing that ourselves. After that, we just look up the title and body values from the Cursor and populate the View elements with them.

      - +

      Step 7

      @@ -189,12 +194,12 @@ and populate the View elements with them.

      margin-top:1em;padding:0em;width:240px;">

      Why handling life-cycle events is important

      -

      If you are used to always having control in your applications, you might not understand why all this life-cycle work is necessary. The reason - is that in Android, you are not in control of your Activity, the + is that in Android, you are not in control of your Activity, the operating system is!

      -

      As we have already seen, the Android model is based around activities calling each other. When one Activity calls another, the current Activity is paused at the very least, and may be killed altogether if the @@ -209,9 +214,9 @@ and populate the View elements with them.

      out while the call Activity takes over.

      -

      Still in the NoteEdit class, we now override the methods - onSaveInstanceState(), onPause() and - onResume(). These are our life-cycle methods +

      Still in the NoteEdit class, we now override the methods + onSaveInstanceState(), onPause() and + onResume(). These are our life-cycle methods (along with onCreate() which we already have).

      onSaveInstanceState() is called by Android if the @@ -241,8 +246,10 @@ and populate the View elements with them.

      @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putLong(NotesDbAdapter.KEY_ROWID, mRowId); + saveState(); + outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId); } +

      We'll define saveState() next.

    • onPause(): @@ -252,7 +259,6 @@ and populate the View elements with them.

      super.onPause(); saveState(); } -

      We'll define saveState() next.

    • onResume(): @@ -264,6 +270,10 @@ and populate the View elements with them.

      }
    • +

      Note that saveState() must be called in both onSaveInstanceState() +and onPause() to ensure that the data is saved. This is because there is no +guarantee that onSaveInstanceState() will be called and because when it is +called, it is called before onPause().

      Step 8

      @@ -301,19 +311,18 @@ database.

      necessary. The resulting method should look like this:

       @Override
      -protected void onActivityResult(int requestCode, int resultCode, 
      -                                Intent intent) {
      +protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
           super.onActivityResult(requestCode, resultCode, intent);
           fillData();
       }

      Because the other class now does the work, all this has to do is refresh the data.

      - +

      Step 10

      Also remove the lines which set the title and body from the - onListItemClick() method (again they are no longer needed, + onListItemClick() method (again they are no longer needed, only the mRowId is):

           Cursor c = mNotesCursor;
      @@ -344,13 +353,13 @@ so that all that should be left in that method is:
         other occurrences of mNotesCursor in your fillData() method.
       
       

      -Run it! (use Run As -> Android Application on the project right +Run it! (use Run As -> Android Application on the project right click menu again)

      Solution and Next Steps

      You can see the solution to this exercise in Notepadv3Solution -from +from the zip file to compare with your own.

      When you are ready, move on to the Tutorial