Notepad 改造 (2)

買い物から戻りますた。workspace を新規に作成してそっちで同じ事をヤッてみても同じメセジが出やがるので clone した後に作成されるディレクトリの名前を変えてみたり色々ヤッてたのですが、出てくるメセジは同じ。
何故だ、と言いつつよくよく見てみたら next に行けるじゃん。そのまま次に行って finish したらプロジェクトができました。何が悪かったのかは原因不明です。

次に何やるんだっけ

ええと、とりあえず動作確認。とりあえずちゃんと動いたので暗黙的 Intent な画面遷移を盛り込んでみる事に。
まず tower で branch 作ってみると .settings というディレクトリができてます。これは ignore しましょう。てか今ヤッちゃうとタイミング的に微妙なのでスルー。
とりあえず topic branch 作成して checkout して修正に着手。相手にするのは二つの Activity と Manifest になります。
昨晩エントリだと Manifest に filter を記述とありますが、以下でした。昨晩エントリの記述は色々間違えてます。

        <activity android:name=".NoteEdit">
            <intent-filter>
                <action android:name="android.intent.action.INSERT" />
                <action android:name="android.intent.action.EDIT" />
                <data android:scheme="content" />
            </intent-filter>
        </activity>

で、NotepadActivity の画面遷移なあたりを以下にして

    private void createNote() {
    	Intent i = new Intent();
    	i.setAction(Intent.ACTION_INSERT);
    	i.setData(NotesColumns.CONTENT_URI);
    	startActivityForResult(i, ACTIVITY_CREATE);
    }
    
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Uri uri = Uri.parse(NotesColumns.CONTENT_URI + "/" + id);
        Intent i = new Intent();
        i.setAction(Intent.ACTION_EDIT);
        i.setData(uri);
        startActivityForResult(i, ACTIVITY_EDIT);
    }

NoteEdit の onCreate の該当部分を以下かな。

        if (mRowId == null) {
            if (getIntent().getAction() == Intent.ACTION_EDIT) {
                mRowId = Long.parseLong(getIntent().getData().getLastPathSegment());
            }
        }

で試験してみたのですが例外。ええと No Activity found to handle Intent との事。

  • act=android.intent.action.INSERT
  • dat=content://jp.shuri.android.notepadgae/notes

らしい。フィルタの記述が微妙なんかな。mimeType 指定してみたりしたんですが駄目。色々ヤッてる中で Manifest を以下にしたら画面遷移は可能になった。

        <activity android:name=".NoteEdit">
            <intent-filter>
                <action android:name="android.intent.action.INSERT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/vnd.shuri.note" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.EDIT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/vnd.shuri.note" />
            </intent-filter>

がしかし ACTION_EDIT の時にレコードの内容が表示されてない。えらいハマッた挙句に比較なメソドの使い方を間違えている事が判明。

            if (getIntent().getAction() == Intent.ACTION_EDIT) {

じゃなくて equals 使うのかorz
正しくは以下。

        if (mRowId == null) {
        	if (getIntent().getAction().equals(Intent.ACTION_EDIT)) {
                mRowId = Long.parseLong(getIntent().getData().getLastPathSegment());
        	}
        }

java 的には非常識なヒトなのでこーゆーあたりでトンデモなナチュラルをやってしまいます。

ただし

レコードの並び順というかさっき動作確認してみたら、表示が歯脱けになってたりして。もう少し確認してみますが、ここでエントリ投入。

表示歯脱けの件

一旦データを消去して再度試験してるのですが現象が再現しない。何故かデバッガが正常動作しなくて Log 使って色々確認してたんですが、その時に不整合が発生したのかなぁ。