안녕하세요.

Android 싸이트에 있는 Notepad 영문버전을 한글로 변환한 것입니다.

원본 링크 : http://www.coremodeling.com/android/tutorial/notepad/notepad1.htm


Android Notepad Tutorial 한글 문서[자바모델링]

  • 작성자 : 고덕한(javamodeling@gmail.com)
  • 소속 : 자바모델링(http://www.javamodeling.com)
  • 작성일자 : 2010년 06월 03일

영문으로 되어 있는 Android 의 Notepad Tutorial 을 한글 문서로 변환하여 개발자들이 손쉽게 Android Application 을 작성하는데 쉽게 이해할 수 있도록 작성한다.
영문으로 된 내용을 기반으로 단계별로 작성을 해 나갈것이다.

0. Preparing for the Exercise

이 Notepad 를 작성하기 위해서 Eclipse 를 사용할 것이며, 기본적으로 Android 를 개발하기 위한 환경설정이 되어 있다는 가정하에 이 예제를 작성한다.

이 Notepad 를 위해서 기본적인 설정파일과 클래스를 제공하고 있다. 아래의 절차대로 진행하면 된다.

  • 압축된 파일(zip)을 다운로드 한다. Project exercises archive(.zip)
  • 다운로드한 파일을 적절한 디렉토리에 압축을 푼다.
  • NotepadCodeLab 디렉토리를 살펴본다.

1. Notepad Exercise 1

이번 문서에서는 간단한 note 목록과 새로운 note 를 작성하고 add 하는 기능을 살펴본다. edit 은 이번 문서에서 다루지 않는다.

  • ListActivity 의 기본 개념과 menu 객체를 생성하고 핸들링 처리
  • note 를 저장하기 위한 SQLite database 를 사용하는 방법
  • SimpleCursorAdapter 를 사용하여 ListView 에 database cursor 에서 데이터를 바인드 하는 방법
  • 스크린 layout 의 기본 개념과 list view 를 layout 처리하는 방법, Activity menu 에 item 을 추가하는 방법, 그리고 menu 선택에 따라서 Activity 가 어떻게 처리하는지에 대한 방법

1.1 Step 1

Notepad 의 어플리케이션을 개발하기 위한 기본 환경설정과 코드를 포함하고 있는 소스를 다운로드 받는다.(위의 내용 참고)

File -> New -> Android Project 를 선택하고, Create project from existing source 를 선택한다.

그리고 Locationn 에서 Browse 버튼을 클릭하여, 다운로드해서 압축을 푼 디렉토리에서 Notepadv1 디렉토리를 선택한다. 그러면 자동으로 Project name 이 입력이 된다.

Build Target 은 설정된 AVD 중에서 적절한 것을 선택한다. Application Name 과 Package name 은 자동으로 입력이 되며, Min SDK Version 에 선택된 Build Target 에 맞게 버전 번호를 입력한다.

 

그리고 Finish 버튼을 클릭하면 프로젝트가 생성이 된다.

1.2 Step 2

NotesDbAdapter 클래스를 살펴보면, 이 클래스는 SQLite database 를 사용하여, 새로 작성한 note 를 저장하고, 수정하기 위해서 Database 관련 작업들을 처리하는 클래스이다.

NotesDbAdapter 클래스의 첫 부분의 멤버변수를 살펴보면, note 의 내용을 Database 에 저장하기 위한 컬럼명을 정의하고 있다. 컬럼의 세개가 있고, _id, title, body 의 세부분으로 나뉘어져 있으며, _id 는 Database 에 query 를 보내서 조회하거나, 내용을 수정할때 사용되어지는 컬럼(PK)이다.

 

NotesDbAdapter() 생성자는 Context 를 참조얻는 코드를 포함하고 있다. Activity 를 사용하게 되면, Activity 에서 상속받는 Context 의 참조를 얻도록 하여, Context 가 필요할 경우에 사용할 수 있도록 처리하고 있다.

 

open() 메소드는 DatabaseHelper의 인스턴스를 호출하고 있으며, 이 DatabaseHelper 는 SQLiteOpenHelper 클래스를 구현한 로컬클래스이다. 또한 getWritableDatabase() 메소드를 호출하여 database 를 creating/opening 처리를 해준다.

 

close() 메소드는 database 에 대해서 관련된 리소스를 해제하고, connection 을 close 한다.

 

createNote() 메소드는 새로운 Note 에 대한 title 과 body 값을 string 값으로 가져와서 database 에 새로 노트를 생성한다. 정상적으로 note 를 생성하면, 새로이 생성된 note 의 _id 값을 리턴한다.

 

deleteNote() 는 삭제하고자 하는 note 에 대한 rowid 를 가지고, 해당 note 를 삭제한다.

 

fetchAllNotes() 메소드는 database 에서 모든 note 에 대해서 조회한 후에, Cursor 를 리턴한다. 실제로 query() 메소드가 모든 note 를 가져오는 쿼리를 실행한다.

 

fetchNote() 메소드는 특정 rowid 를 통해서 하나의 Note 를 가져와서 하나의 행을 포함한 Cursor 를 리턴한다. query() 메소드를 통해서 하나의 note 만을 가져오도록 처리를 한다.

 

updateNote() 메소드는 rowId, title, body 값을 사용하여, ContentValues 인스턴스를 사용하여, note 의 내용을 수정한다.

 

1.3 Step 3

/res/layout/notepad_list.xml 파일을 보면, 디자인 된 것은 없으며, 기본적인 layout 을 설정하기 위해서 Android Application 에서 사용되는 코드가 정의되어 있다.

xml 파일 기반의 UI 디자인이기에, 태그를 사용하고 있으며, xmlns:android="http://schemas.android.com/apk/res/android 의 android namespace 를 설정하고 있다.

 

1.4 Step 4

/res/layout/notepad_list.xml 파일에 디자인을 하기 위해서 아래와 같이 코드를 작성한다.

 

ListView 와 TextView 의 id 값에 있는 @ 문자는 XML parser 가 이 값을 id 로 처리하도록 하게 하고, ID resource 로 사용하게끔 한다.

ListView 와 TextView 는 서로 하나의 note 를 나타내기 위해서 한번씩 사용되어 진다. note 가 한 건도 없는 경우에는 자동으로 "No Notes Yet!" 문자열 값이 보여진다.

list 와 empty ID 는 Android platform 에서 제공하고 있으며, 반드시 id 앞에 android: 가 와야 한다.(예: @android:id/list)

1.5 Step 5

ListView 에 note 목록을 생성하기 위해서, 각각의 row 에 대한 View 를 정의해야 한다.

  • /res/layout/notes_row.xml 파일을 생성한다.
  • 아래의 코드를 입력한다.

  • 파일을 저장한다.

1.6 Step 6

Notepadv1 클래스를 살펴보면, 세 개의 메소드가 존재한다. 이 세개의 메소드를 override 되어 있다.

    onCreate() 메소드 : Activity 가 start 되었을 때, 호출된다. 처음 리소스를 설정하는 역할에 주로 사용된다. onCreateOPtionsMenu() 메소드 : Activity 에 대한 Menu 를 활성화할 때 사용, 사용자가 menu버튼을 클릭하면 Menu 를 보여준다. onOptionItemSelected() 메소드 : Menu 에 이벤트가 발생했을 때 호출되는 메소드

1.7 Step 7

Notepadv1 클래스의 supser class 를 Activity 에서 ListActivity 로 변경한다.

 

1.8 Step 8

onCreate() 메소드 구현

/res/layout/notepad_list.xml 파일을 contentview 로 지정하고, database 를 생성하고, open 하는 코드를 작성한다. 그리고 fillDate() 메소드를 호출한다.

멤버변수에 mDbHelper 변수를 선언한다.

아래와 같이 onCreate() 메소드를 구현한다.

 

1.9 Step 9

onCreateOptionMenu() 메소드 구현.

Add Item 메뉴를 추가하기 위해서 우선, /res/values/strings.xml 파일에서 아래와 같이 입력을 한다.

 

메뉴의 위치를 설정하기 위해서 멤버변수로 아래와 같이 코드를 입력한다.

 

그리고 아래와 같이 코딩한다.

 

1.10 Step 10

onOptionItemSelected() 메소드 구현

메뉴가 클릭되었을때, 어떤 메뉴가 클릭되었는지를 판단해서 해당 메뉴에 맞는 기능을 실행하도록 처리

 

1.11 Step 11

createNote() 메소드 구현

새로운 Note 를 생성하는 메소드로써, Note 의 번호를 붙여가면서 생성하도록 처리

 

1.12 Step 12

fillDate() 메소드 구현

이 메소드에서는 database 에서 조회한 Cursor 를 layout 에 적용하기 위해서 SimpleCursorAdapter 를 사용한다.

DB 에서 조회한 값을 layout 에 보여주기 위해서, from 변수에는 보여질 Column 을 배열로 정의하고, to 변수에서는 데이터를 보여질 layout 의 view 의 값을 배열로 정의한다.

 

1.13 Step 13

Notepadv1 프로젝트를 선택하고, 오른쪽 마우스 클릭한 다음, Run As -> Android Application 을 선택하여 실행한다.