노트패드 연습 2
노트패드에 사용자 생성, 편집, 삭제 기능을 추가해 보는 것이 연습 2의 목표이다.
. 새로운 activity를 생성하고 android manifest를 추가한다.
. StartSubActivity()를 이용해서 다른 activity를 비동기로 일으킨다.
. activity들 사이에 데이터 통과
. 좀더 진보한 화면 레이아웃을 어떻게 사용하나
Step 1
볼 것들 : String.xml , rows 에 대한 멤버변수, fillData(), onListItemClick() 와
Step 2
OnCreate() 메소드를 확인한다. 연습1과 변화없다.
Step 3
onCreateOptionMenu()에서 파란색 부분을 추가한다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert);
menu.add(0, DELETE_ID, R.string.menu_delete);
return true;
}
Step 4
onMenuItemSelected()에서 DELETE_ID에 대한 새로운 경우를 추가한다.
@Override
public boolean onMenuItemSelected(int featureId, Item item) {
super.onMenuItemSelected(featureId, item);
switch(item.getId()) {
case INSERT_ID:
createNote();
fillData();
break;
case DELETE_ID:
dbHelper.deleteRow(rows.get(getSelection()).rowId);
fillData();
break;
}
return true;
}
Step 5
createNote() 메소드를 채운다. NoteEdit 클래스를 이용해서 노트(ACTIVITY_CREATE)를 생성하기 위해 새 intent를 생성한다.
Intent i = new Intent(this, NoteEdit.class);
startSubActivity(i, ACTIVITY_CREATE);
하지만 아직 NoteEdit는 생성하지 않았다. 뒤에서 보자.
Step 6
onListItemClick()를 채우자.
사용자가 리스트로부터 아이템을 선택하므로onListItemClick()은 override 된 메소드이다.
이 메소드는 NoteEdit 클래스를 이용해서 노트를 편집하기 위해 intent를 생성한다.
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, NoteEdit.class); // intent 를 생성
i.putExtra(KEY_ROW_ID, rows.get(position).rowId); // row id 값을 가져옴
i.putExtra(KEY_BODY, rows.get(position).body); // body 값을 가져옴
i.putExtra(KEY_TITLE, rows.get(position).title); // title 값을 가져옴
startSubActivity(i, ACTIVITY_EDIT);
putExtra(String name, Object name) 은 intent에 확장된 데이터를 넣는 것이다.
Step 7
onActivityResult를 다음과 같이 변경한다.
protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) {
super.onActivityResult(requestCode, resultCode, data, extras);
// TODO: fill in rest of method
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(KEY_TITLE);
String body = extras.getString(KEY_BODY);
dbHelper.createRow(title, body);
fillData();
break;
case ACTIVITY_EDIT:
Long rowId = extras.getLong(KEY_ROW_ID);
if (rowId != null) {
String editTitle = extras.getString(KEY_TITLE);
String editBody = extras.getString(KEY_BODY);
dbHelper.updateRow(rowId, editTitle, editBody);
}
fillData();
break;
}
}
Step 8
note_edit.xml 을 보라.
Step 9
android.app.Activity를 확장해서 NoteEdit 클래스를 생성한다.
Step 10, Step 11
onClick()과 onCreate() 를 채운다.
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.note_edit);
titleText = (EditText) findViewById(R.id.title);
bodyText = (EditText) findViewById(R.id.body);
Button confirmButton = (Button) findViewById(R.id.confirm);
rowId = null;
Bundle extras = getIntent().getExtras();
if (extras != null) {
String title = extras.getString(Notepadv2.KEY_TITLE);
String body = extras.getString(Notepadv2.KEY_BODY);
rowId = extras.getLong(Notepadv2.KEY_ROW_ID);
if (title != null) {
titleText.setText(title);
}
if (body != null) {
bodyText.setText(body);
}
}
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putString(Notepadv2.KEY_TITLE, titleText.getText().toString());
bundle.putString(Notepadv2.KEY_BODY, bodyText.getText().toString());
if (rowId != null) {
bundle.putLong(Notepadv2.KEY_ROW_ID, rowId);
}
setResult(RESULT_OK, null, bundle);
finish();
}
});
}
Step 12
manifest 파일에 새로운 activity를 채운다.
<activity class=".NoteEdit"/>
Step 13
.
노트패드에 사용자 생성, 편집, 삭제 기능을 추가해 보는 것이 연습 2의 목표이다.
. 새로운 activity를 생성하고 android manifest를 추가한다.
. StartSubActivity()를 이용해서 다른 activity를 비동기로 일으킨다.
. activity들 사이에 데이터 통과
. 좀더 진보한 화면 레이아웃을 어떻게 사용하나
Step 1
볼 것들 : String.xml , rows 에 대한 멤버변수, fillData(), onListItemClick() 와
onActivityResult(
Step 2
OnCreate() 메소드를 확인한다. 연습1과 변화없다.
Step 3
onCreateOptionMenu()에서 파란색 부분을 추가한다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert);
menu.add(0, DELETE_ID, R.string.menu_delete);
return true;
}
Step 4
onMenuItemSelected()에서 DELETE_ID에 대한 새로운 경우를 추가한다.
@Override
public boolean onMenuItemSelected(int featureId, Item item) {
super.onMenuItemSelected(featureId, item);
switch(item.getId()) {
case INSERT_ID:
createNote();
fillData();
break;
case DELETE_ID:
dbHelper.deleteRow(rows.get(getSelection()).rowId);
fillData();
break;
}
return true;
}
Step 5
createNote() 메소드를 채운다. NoteEdit 클래스를 이용해서 노트(ACTIVITY_CREATE)를 생성하기 위해 새 intent를 생성한다.
Intent i = new Intent(this, NoteEdit.class);
startSubActivity(i, ACTIVITY_CREATE);
하지만 아직 NoteEdit는 생성하지 않았다. 뒤에서 보자.
Step 6
onListItemClick()를 채우자.
사용자가 리스트로부터 아이템을 선택하므로onListItemClick()은 override 된 메소드이다.
이 메소드는 NoteEdit 클래스를 이용해서 노트를 편집하기 위해 intent를 생성한다.
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, NoteEdit.class); // intent 를 생성
i.putExtra(KEY_ROW_ID, rows.get(position).rowId); // row id 값을 가져옴
i.putExtra(KEY_BODY, rows.get(position).body); // body 값을 가져옴
i.putExtra(KEY_TITLE, rows.get(position).title); // title 값을 가져옴
startSubActivity(i, ACTIVITY_EDIT);
putExtra(String name, Object name) 은 intent에 확장된 데이터를 넣는 것이다.
Step 7
onActivityResult를 다음과 같이 변경한다.
protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) {
super.onActivityResult(requestCode, resultCode, data, extras);
// TODO: fill in rest of method
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(KEY_TITLE);
String body = extras.getString(KEY_BODY);
dbHelper.createRow(title, body);
fillData();
break;
case ACTIVITY_EDIT:
Long rowId = extras.getLong(KEY_ROW_ID);
if (rowId != null) {
String editTitle = extras.getString(KEY_TITLE);
String editBody = extras.getString(KEY_BODY);
dbHelper.updateRow(rowId, editTitle, editBody);
}
fillData();
break;
}
}
Step 8
note_edit.xml 을 보라.
Step 9
android.app.Activity를 확장해서 NoteEdit 클래스를 생성한다.
Step 10, Step 11
onClick()과 onCreate() 를 채운다.
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.note_edit);
titleText = (EditText) findViewById(R.id.title);
bodyText = (EditText) findViewById(R.id.body);
Button confirmButton = (Button) findViewById(R.id.confirm);
rowId = null;
Bundle extras = getIntent().getExtras();
if (extras != null) {
String title = extras.getString(Notepadv2.KEY_TITLE);
String body = extras.getString(Notepadv2.KEY_BODY);
rowId = extras.getLong(Notepadv2.KEY_ROW_ID);
if (title != null) {
titleText.setText(title);
}
if (body != null) {
bodyText.setText(body);
}
}
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putString(Notepadv2.KEY_TITLE, titleText.getText().toString());
bundle.putString(Notepadv2.KEY_BODY, bodyText.getText().toString());
if (rowId != null) {
bundle.putLong(Notepadv2.KEY_ROW_ID, rowId);
}
setResult(RESULT_OK, null, bundle);
finish();
}
});
}
Step 12
manifest 파일에 새로운 activity를 채운다.
<activity class=".NoteEdit"/>
Step 13
.