FileDocCategorySizeDatePackage
NotesList.javaAPI DocGoogle Android v1.5 Example7783Sun Nov 11 13:01:04 GMT 2007com.google.android.notepad

NotesList

public class NotesList extends android.app.ListActivity
Displays a list of notes. Will display notes from the ContentUri provided int the intent if there is one, otherwise uses the default list from the

Fields Summary
public static final int
DELETE_ID
public static final int
INSERT_ID
private static final String[]
PROJECTION
The columns we are interested in from the database
private android.database.Cursor
mCursor
Cursor which holds list of all notes
Constructors Summary
Methods Summary
private final voiddeleteItem()

        mCursor.moveTo(getSelection());
        mCursor.deleteRow();
    
private final voidinsertItem()

        // Launch activity to insert a new item
        startActivity(new Intent(Intent.INSERT_ACTION, getIntent().getData()));
    
protected voidonCreate(android.os.Bundle icicle)



    
        
        super.onCreate(icicle);

        setDefaultKeyMode(SHORTCUT_DEFAULT_KEYS);

        // If no data was given in the intent (because we were started
        // as a MAIN activity), then use our default content provider.
        Intent intent = getIntent();
        if (intent.getData() == null) {
            intent.setData(NotePad.Notes.CONTENT_URI);
        }
        
        setupListStripes();

        mCursor = managedQuery(getIntent().getData(), PROJECTION, null, null);
        
        // Used to map notes entries from the database to views
        ListAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, mCursor,
                new String[] {NotePad.Notes.TITLE}, new int[] {android.R.id.text1});
        setListAdapter(adapter);
    
public booleanonCreateOptionsMenu(android.view.Menu menu)

        super.onCreateOptionsMenu(menu);

        // This is our one standard application action -- inserting a
        // new note into the list.
        menu.add(0, INSERT_ID, R.string.menu_insert).setShortcut(
                KeyEvent.KEYCODE_3, 0, KeyEvent.KEYCODE_A);

        // Generate any additional actions that can be performed on the
        // overall list.  In a normal install, there are no additional
        // actions found here, but this allows other applications to extend
        // our menu with their own actions.
        Intent intent = new Intent(null, getIntent().getData());
        intent.addCategory(Intent.ALTERNATIVE_CATEGORY);
        menu.addIntentOptions(
            Menu.ALTERNATIVE, 0, new ComponentName(this, NotesList.class),
            null, intent, 0, null);

        return true;
    
protected voidonListItemClick(android.widget.ListView l, android.view.View v, int position, long id)

        ContentURI url = getIntent().getData().addId(getSelectionRowID());
        
        String action = getIntent().getAction();
        if (Intent.PICK_ACTION.equals(action)
                || Intent.GET_CONTENT_ACTION.equals(action)) {
            // The caller is waiting for us to return a note selected by
            // the user.  The have clicked on one, so return it now.
            setResult(RESULT_OK, url.toString());
        } else {
            // Launch activity to view/edit the currently selected item
            startActivity(new Intent(Intent.EDIT_ACTION, url));
        }
    
public booleanonOptionsItemSelected(Menu.Item item)

        switch (item.getId()) {
        case DELETE_ID:
            deleteItem();
            return true;
        case INSERT_ID:
            insertItem();
            return true;
        }
        return super.onOptionsItemSelected(item);
    
public booleanonPrepareOptionsMenu(android.view.Menu menu)

        super.onPrepareOptionsMenu(menu);
        final boolean haveItems = mCursor.count() > 0;

        // If there are any notes in the list (which implies that one of
        // them is selected), then we need to generate the actions that
        // can be performed on the current selection.  This will be a combination
        // of our own specific actions along with any extensions that can be
        // found.
        if (haveItems) {
            // This is the selected item.
            ContentURI uri = getIntent().getData().addId(getSelectionRowID());

            // Build menu...  always starts with the EDIT action...
            Intent[] specifics = new Intent[1];
            specifics[0] = new Intent(Intent.EDIT_ACTION, uri);
            Menu.Item[] items = new Menu.Item[1];

            // ... is followed by whatever other actions are available...
            Intent intent = new Intent(null, uri);
            intent.addCategory(Intent.SELECTED_ALTERNATIVE_CATEGORY);
            menu.addIntentOptions(Menu.SELECTED_ALTERNATIVE, 0, null, specifics,
                                  intent, Menu.NO_SEPARATOR_AFTER, items);

            // ... and ends with the delete command.
            menu.add(Menu.SELECTED_ALTERNATIVE, DELETE_ID, R.string.menu_delete).
                setShortcut(KeyEvent.KEYCODE_2, 0, KeyEvent.KEYCODE_D);
            menu.addSeparator(Menu.SELECTED_ALTERNATIVE, 0);

            // Give a shortcut to the edit action.
            if (items[0] != null) {
                items[0].setShortcut(KeyEvent.KEYCODE_1, 0, KeyEvent.KEYCODE_E);
            }
        } else {
            menu.removeGroup(Menu.SELECTED_ALTERNATIVE);
        }

        // Make sure the delete action is disabled if there are no items.
        menu.setItemShown(DELETE_ID, haveItems);
        return true;
    
private voidsetupListStripes()
Add stripes to the list view.

        // Get Drawables for alternating stripes
        Drawable[] lineBackgrounds = new Drawable[2];
        
        lineBackgrounds[0] = getResources().getDrawable(R.drawable.even_stripe);
        lineBackgrounds[1] = getResources().getDrawable(R.drawable.odd_stripe);

        // Make and measure a sample TextView of the sort our adapter will
        // return
        View view = getViewInflate().inflate(
                android.R.layout.simple_list_item_1, null, null);

        TextView v = (TextView) view.findViewById(android.R.id.text1);
        v.setText("X");
        // Make it 100 pixels wide, and let it choose its own height.
        v.measure(MeasureSpec.makeMeasureSpec(View.MeasureSpec.EXACTLY, 100),
                MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, 0));
        int height = v.getMeasuredHeight();
        getListView().setStripes(lineBackgrounds, height);