Interesting/ANDROID | Posted by hyena0 2007. 12. 14. 00:13

안드로이드 : 노트패드 연습 2

노트패드 연습 2

 노트패드에 사용자 생성, 편집, 삭제 기능을 추가해 보는 것이 연습 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

.