Notepad Tutorialで学ぶAndroidアプリのSQLite講座4

SQLite講座3の続き。

今回の講座でNotepad Exercise 2が完了です!





Step7: ノートの編集用のレイアウトを眺めよう


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="match_parent"
	android:layout_height="match_parent">
	
	<LinearLayout android:orientation="horizontal"
		android:layout_width="match_parent"
		android:layout_height="wrap_content">

		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:text="@string/title" />
		<EditText android:id="@+id/title" 
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:layout_weight="1"/>
	</LinearLayout>

	<TextView android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:text="@string/body" />
	<EditText android:id="@+id/body" android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:layout_weight="1"
		android:scrollbars="vertical" />
	
	<Button android:id="@+id/confirm" 
	  	android:text="@string/confirm"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

</LinearLayout>


layout_weightは幅をどこくらいの大きさにするかを割合で決めます。
デフォルトが0で、0の場合は最小限の大きさを表示します。

horizontalで、TextViewが0でEditTextが1なので
TextViewの幅を最小限にして、残りの幅は全てEditTextを表示すると。

もし1と2だったら、1対2の割合の幅で表示されます。


Step8: ノートの編集用のクラスを作る


新しいクラスの作り方
com.android.demo.notepad2 packageのところを右クリックして、New -> Class

NameのところにNoteEditを入力
Superclassのところにandroid.app.Activityを入力してFinish

現れたNoteEdit classのところで、右クリックしてSource -> Override/implement Methods

スクロールダウンして、onCreate(Bundle)をチェックしてOK。


onCreate(Bundle)メソッドがNoteEdit Classに自動的に追加されます。

package com.android.demo.notepad2;

import android.app.Activity;
import android.os.Bundle;

public class NoteEdit extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

}


Step9: NoteEdit ClassのonCreateにいろいろ追加


レイアウトを設定して、インテントからもらったtitleとbodyをレイアウトの部品に当てはめて、確認ボタンの設定をします。


やること!

レイアウトの設定
setContentView(R.layout.note_edit);

Activityのタイトルを変更
setTitle(R.string.edit_note);

EditTextとBUttonの部品をレイアウトから探す
mTitleText = (EditText) findViewById(R.id.title);
mBodyText = (EditText) findViewById(R.id.body);
Button confirmButton = (Button) findViewById(R.id.confirm);

mTitleTextとmBodyTextはクラスメンバーでクラスの最初のところに定義する

クラスの最初に、Long mRowIdをプライペートメンバーとして定義して、現在編集しているNoteのidを保存しておく。

インテントからtitleとbodyを受け取って、レイアウトの部品に当て込む

confirmButtonにリスナーを設定する


で、全部あわせると下記のコードになるっと。

package com.android.demo.notepad2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

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);
		setTitle(R.string.edit_note);
		
		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() {
			
			@Override
			public void onClick(View v) {
				// 次のステップでやるよ!
			}
		});
	}

}


Step10: Buttonにリスナーを設定する



そもそもリスナーとは何なのかというと、ボタンをクリックしたときに、
ボタンがクリックされたよー、と知らせてくれて、それをきっかけに何かしてくれるやつです。

今回は編集が終わったよというのを知らせるリスナーをボタンに設定します。


全体的な流れは、

ボタンがタップされたら、リスナーでキャッチして、
まずバンドルを作ってそこにtitleとbodyとノートの場所を設定して、
そのあと、インテントを作ってそのバンドルを渡してあげて、
そのインテントをsetResultに設定して、Activityを終了するっと。

confirmButton.setOnClickListener(new View.OnClickListener() {
			
	@Override
	public void onClick(View v) {
		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();
	}
});


Step11: Activityをマニフェストに設定する


新しいActivity(NoteEdit)を作ったら、マニフェストに設定しないとAndroidが見つけることができません。

ということで、マニフェストに設定するやり方-。

直接エディタに書いてしまえばいいのですが、
なにやら別の楽なやりかたがあるらしいのでそれを試してみます。


AndroidManifest.xmlを開く
Applicationタブをクリック

Application NotesのところにあるAddをクリック
Activityをダブルクリック

Application Notesに新しくできたActivityをクリック
Attributes for ActivityのNameのところに.NoteEditを入力


以上です。

これでAndroidManifest.xmlに
<activity android:name=".NoteEdit" />
が追加されます。


Step12: さっそく実行しよう


ノートの新規作成、保存、リスト表示、編集、削除
全部できました!




今回のSQLite講座4はここまで。
SQLite講座も残すところExercise 3だけ。

がんばろー。

コメントを残す

メールアドレスが公開されることはありません。