msgbartop
Desarrollador web, con todo lo que ello implica
msgbarbottom

20 Feb 10 Tutorial Android paso a paso II: Desarrollo de la aplicación Notepad

Continuamos con la segunda parte del tutorial para el desarrollo de una aplicación para Android paso a paso. La primera parte la puedes consultar en Tutorial Android paso a paso I: Desarrollo de la aplicación Notepad.

En este segundo post, vamos a crear una segunda actividad que nos permita crear y editar notas. Además, vamos a poder tener la posibilidad de eliminar notas a través del un menú contextual.

Objetivos:
• Crear una nueva actividad.
• Realizar llamadas a la nueva actividad.
• Paso de datos entre las actividades.
• Crear un nuevo menu contextual.

Paso 1

Vamos a crear un menú contextual que nos permita eliminar las notas creadas por el usuario. Este menú se activará al seleccionar una nota:

1. Relacionamos la lista de notas (ListView) con el menu contextual:

1
registerForContextMenu(getListView());

2. Creamos el menú contextual con la opción de eliminar una nota:

1
2
3
4
5
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}

3. Ahora que tenemos el menú creado y relacionado con el listado, tenemos que atender a las pulsaciones en el menú contextual:

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public boolean onContextItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case DELETE_ID:
            AdapterContextMenuInfo info = (AdapterContextMenuInfo)
            item.getMenuInfo();
            mDbHelper.deleteNote(info.id);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}

Paso 2

Como hemos visto antes, vamos a dar la posibilidad al usuario de crear y editar notas. Para ello, necesitamos una actividad que controle la interfaz de usuario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class NoteEdit extends Activity {
    private EditText mTitleText;
    private EditText mBodyText;
    private Long mRowId;
 
    @Override
    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);
            }
 
            if (body != null) {
                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) {
            bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId);
        }
        Intent mIntent = new Intent();
        mIntent.putExtras(bundle);
        setResult(RESULT_OK, mIntent);
        finish();
    }});
    }
}

Paso 3

Ya tenemos la interfaz de usuario, y la actividad para controlarla. Vamos a abrir la nueva actividad desde el listado, para crear una nueva nota. Modificamos el método createNote() de la siguiente manera:

1
2
3
4
private void createNote() {
    Intent i = new Intent(this, NoteEdit.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}

Paso 4

Para editar las notas ya creadas, creamos un evento para atender a las pulsaciones de los elementos de las listas. Pasamos los datos de la nota a la nueva actividad.

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Cursor c = mNotesCursor;
    c.moveToPosition(position);
    Intent i = new Intent(this, NoteEdit.class);
    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
    i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
    c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
    i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
    c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
    startActivityForResult(i, ACTIVITY_EDIT);
}

Paso 5

Los métodos creados anteriormente createNote() y onListItemClick() nos devuelven datos, por lo que necesitamos un método para manejar la respuesta. onActivityResult() es el método ejecutado cuando una actividad devuelve resultados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Bundle extras = intent.getExtras();
    switch(requestCode) {
        case ACTIVITY_CREATE:
            String title = extras.getString(NotesDbAdapter.KEY_TITLE);
            String body = extras.getString(NotesDbAdapter.KEY_BODY);
            mDbHelper.createNote(title, body);
            fillData();
            break;
        case ACTIVITY_EDIT:
            Long rowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
            if (rowId != null) {
            String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
            String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
            mDbHelper.updateNote(rowId, editTitle, editBody);
    }
    fillData();
    break;
}

Paso 6

La nueva actividad que hemos definido anteriormente, hay que añadirla a AndroidManifest.xml. Esto permite al sistema conocer los componentes de la aplicación.
Eclipse include un editor para el manifiesto que facilita la edición del fichero AndroidManifest.xml. Para añadir una nueva actividad:

1. Abrir el fichero AndroidManifest.xml
2. Seleccionar la pestaña Application.
3. Pulsamos Add en la sección de Application Nodes.
4. En el cuadro de diálogo, seleccionar “Create a new element at the top level, in Application” y Activity. Pulsar OK.
5. Seleccionar la nueva actividad creada, y en el campo de texto Name, escribir .NoteEdit.

Paso 7

Ya hemos terminado esta segunda entrega del tutorial. Si ejecutamos la aplicación, editamos una nota y pulsamos el botón atrás, veremos que se produce un error. Veremos como solucionar estos problemas en el siguiente post.

Cualquier pregunta o duda (o corrección) en los comentarios.

Ya puedes consultar la tercera parte del tutorial: Tutorial Android paso a paso III: Desarrollo de la aplicación Notepad

Etiquetas: , , ,

Comentarios de los lectores

  1. |

    Hola! Perdona que empiece a preguntar tan pronto pero la linea de código 1 del paso 1..¿¿donde tengo que ponerla??

    Muchas gracias y un saludo.

  2. |

    Hola Ruben, tienes que ponerlo dentro del método onCreate.

Deje un comentario