如何在记事本中查看笔记

时间:2013-06-13 20:43:06

标签: android notepad

我已经完成了Notepad教程v3,但有一点我无法弄清楚如何在视图模式下打开笔记而不是编辑模式。

我用按钮和东西制作了自己的记事本,但仍无法查看它们。 助手类

public static final String KEY_TITLE = "title";
public static final String KEY_BODY = "body";
public static final String KEY_ROWID = "_id";

private static final String TAG = "NotesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;

/**
 * Database creation sql statement
 */
private static final String DATABASE_CREATE =
    "create table notes (_id integer primary key autoincrement, "
    + "title text not null, body text not null);";

private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "notes";
private static final int DATABASE_VERSION = 2;

private final Context mCtx;

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS notes");
        onCreate(db);
    }
}

/**
 * Constructor - takes the context to allow the database to be
 * opened/created
 * 
 * @param ctx the Context within which to work
 */
public NotesDbAdapter(Context ctx) {
    this.mCtx = ctx;
}

/**
 * Open the notes database. If it cannot be opened, try to create a new
 * instance of the database. If it cannot be created, throw an exception to
 * signal the failure
 * 
 * @return this (self reference, allowing this to be chained in an
 *         initialization call)
 * @throws SQLException if the database could be neither opened or created
 */
public NotesDbAdapter open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

public void close() {
    mDbHelper.close();
}


/**
 * Create a new note using the title and body provided. If the note is
 * successfully created return the new rowId for that note, otherwise return
 * a -1 to indicate failure.
 * 
 * @param title the title of the note
 * @param body the body of the note
 * @return rowId or -1 if failed
 */
public long createNote(String title, String body) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_BODY, body);

    return mDb.insert(DATABASE_TABLE, null, initialValues);
}

/**
 * Delete the note with the given rowId
 * 
 * @param rowId id of note to delete
 * @return true if deleted, false otherwise
 */
public boolean deleteNote(long rowId) {

    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

/**
 * Return a Cursor over the list of all notes in the database
 * 
 * @return Cursor over all notes
 */
public Cursor fetchAllNotes() {

    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
            KEY_BODY}, null, null, null, null, null);
}

/**
 * Return a Cursor positioned at the note that matches the given rowId
 * 
 * @param rowId id of note to retrieve
 * @return Cursor positioned to matching note, if found
 * @throws SQLException if note could not be found/retrieved
 */
public Cursor fetchNote(long rowId) throws SQLException {

    Cursor mCursor =

        mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
                null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

/**
 * Update the note using the details provided. The note to be updated is
 * specified using the rowId, and it is altered to use the title and body
 * values passed in
 * 
 * @param rowId id of note to update
 * @param title value to set note title to
 * @param body value to set note body to
 * @return true if the note was successfully updated, false otherwise
 */
public boolean updateNote(long rowId, String title, String body) {
    ContentValues args = new ContentValues();
    args.put(KEY_TITLE, title);
    args.put(KEY_BODY, body);

    return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}

}

主要课程

public class Notepadv3 extends ListActivity {
private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;

private static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;

private NotesDbAdapter mDbHelper;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notes_list);
    mDbHelper = new NotesDbAdapter(this);
    mDbHelper.open();
    fillData();
    registerForContextMenu(getListView());
}

private void fillData() {
    Cursor notesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(notesCursor);

    // Create an array to specify the fields we want to display in the list (only TITLE)
    String[] from = new String[]{NotesDbAdapter.KEY_TITLE};

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{R.id.text1};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter notes = 
        new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to);
    setListAdapter(notes);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, INSERT_ID, 0, R.string.menu_insert);
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
        case INSERT_ID:
            createNote();
            return true;
    }

    return super.onMenuItemSelected(featureId, item);
}

@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);
}

@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);
}

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

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Intent i = new Intent(this, NoteEdit.class);
    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
    startActivityForResult(i, ACTIVITY_EDIT);
}

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

}

3 个答案:

答案 0 :(得分:2)

您可以创建新活动。如果你想快速和肮脏,请复制和修改NoteEdit类中的东西。 如果你有时间,你应该花一些时间考虑设计,并按照 DRY 进行操作,因为Code-Guru建议“复制和粘贴编码是一种糟糕的设计”。

public class NoteView extends Activity {
private NotesDbAdapter mDbHelper;
private TextView mTitleText;
private TextView mBodyText;
private Long mRowId;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDbHelper = new NotesDbAdapter(this);
    mDbHelper.open();
    setContentView(R.layout.note_view);
    setTitle(R.string.edit_note);
    mTitleText = (TextView) findViewById(R.id.title);
    mBodyText = (TextView) findViewById(R.id.body);
    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)
                : null;
    }
    populateFields();
}
private void populateFields() {
    if (mRowId != null) {
        Log.v("NoteView", "id "+ mRowId);
        Cursor note = mDbHelper.fetchNote(mRowId);
        //startManagingCursor(note);
        mTitleText.setText(note.getString(note
                .getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
        mBodyText.setText(note.getString(note
                .getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
    }
}
}

找到一个按钮或可以触发该活动的地方。

public void onClick(View v) {
Intent i = new Intent(mCtx, NoteView.class);
    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
    mCtx.startActivity(i);
}

答案 1 :(得分:0)

如您所知,您可以使用Activity中的“附加内容”将数据发送到Intent。要确定数据是处于“查看”模式还是“编辑”模式,只需发送boolean值即可指示它是什么。然后,接收Activity可以检查boolean“额外”,并根据该标记禁用或启用所有可编辑视图。

答案 2 :(得分:0)

记事本应用程序## https://play.google.com/store/apps/details?id=com.FreeNotePad.Notes [免费记事本是一种简单,优雅,简便的方法,可以在智能手机上记录笔记。

曾几何时,你必须在纸质记事本中记下笔记。] 2

public class FontTypePreference extends DialogPreference {
private List<String> fonts = null;
private int selected;

public FontTypePreference(Context context, AttributeSet attrs) {
    super(context, attrs);

    SharedPreferences sharedPref = PreferenceManager
            .getDefaultSharedPreferences(getContext());
    String font = sharedPref.getString("font", "Monospace");

    if (font.equals("Serif"))
        selected = 1;
    else if (font.equals("Sans Serif"))
        selected = 2;
    else
        selected = 0;
}

protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
    // Data has changed, notify so UI can be refreshed!
    builder.setTitle("Choose a font type");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            Editor editor = PreferenceManager.getDefaultSharedPreferences(
                    getContext()).edit();

            if (selected == 0)
                editor.putString("font", "Monospace");
            else if (selected == 1)
                editor.putString("font", "Serif");
            else
                editor.putString("font", "Sans Serif");

            editor.commit();

            notifyChanged();
        }
    });
    builder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // do nothing on a cancel
                }
            });

    // load the font names
    String[] arrayOfFonts = { "Monospace", "Serif", "Sans Serif" };
    fonts = Arrays.asList(arrayOfFonts);

    FontTypeArrayAdapter adapter = new FontTypeArrayAdapter(getContext(),
            android.R.layout.simple_list_item_single_choice, fonts);
    builder.setSingleChoiceItems(adapter, selected,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    selected = which;
                }
            });
} 

public class FontTypeArrayAdapter extends ArrayAdapter<String> {
    public FontTypeArrayAdapter(Context context, int resource,
            List<String> objects) {
        super(context, resource, objects);

    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View v = super.getView(position, convertView, parent);
        final TextView tv = (TextView) v;

        final String option = tv.getText().toString();
        if (option.equals("Serif"))
            tv.setTypeface(Typeface.SERIF);
        else if (option.equals("Sans Serif"))
            tv.setTypeface(Typeface.SANS_SERIF);
        else if (option.equals("Monospace"))
            tv.setTypeface(Typeface.MONOSPACE);

        tv.setTextColor(Color.BLACK);
        tv.setPadding(10, 3, 3, 3);

        return v;
    }

}

}