액티비티에서 액티비티에서 또는 프래그먼트로, 여러 경로로의 데이터 전달 시에 안드로이드에서는 주로

Intent라는 객체를 이용하게 됩니다.

이 객체에 할 일을 담을 수도 있고, 어떠한 데이터를 담아서 다른 액티비티에게 전달해 줄 수 있죠.

그런데 Intent에 객체나 클래스, 자주 사용하는 ArrayList와 같은 것을 담기엔 무리가 있어 보이네요.

 

그래서 사용하는게 Parcelable이라는 객체입니다.

이 객체에는 객체를 담을 수 있습니다.

예를 들어, 어떤 데이터를 주고 받을 때, 여러분들은 데이터만을 담은 클래스를 자주 활용할 것입니다. 대표적으로 ListView를 활용할 때죠.


parcel을 이용한 데이터 클래스 만들기

먼저 여러분이 활용할 데이터 클래스를 만들어 보겠습니다.

먼저 우리는 parcel을 이용할 것이니 implements부터 해줍니다. 그러면 자동으로

1. describeContents() 와 writeToParcel을 Override시켜 줄 것입니다. 근데 비어있네요? 이것도 별도의 control이 필요하지 않은 이상 일단 그대로 둡니다.

describeContents() - Parcel 하려는 오브젝트의 종류를 정의한다. 

writeToParcel(Parcel dest, int flags) - 실제 오브젝트 serialization/flattening을 하는 메소드. 오브젝트의 각 엘리먼트를 각각 parcel해줘야 한다.

2. 다음으로는 여러분의 데이터를 만들면 됩니다. 제가 만든 예제에서는 간단하게 학생이름과 학번을 사용했습니다.

3. 이렇게 생성자를 만들고 나면, 사실 이 전에 class name에 빨간 밑줄이 그어져 있는 것을 확인 할 수 있는데, 이 부분에 마우스를 가져다놓으면 add하라는 명령어 하나가 보일 것입니다. 그걸 그대로 클릭해주면! 위의 형식이 완성됩니다.

Parcel에서 데이터를 un-marshal/de-serialize하는 단계를 추가해줘야 한다. 그러기 위해서 Parcelable.Creator 타입의 CREATOR라는 변수를 정의해야 한다. 이 변수를 정의하지 않으면 안드로이드는 다음과 같은 익셉션을 발생한다.

Parcelable protocol requires a Parcelable.Creator object called CREATOR

4. 물론, 비어있던 writeToParcel도 채워진게 보이죠? 

5. 자, 그러면 이제 클래스 데이터를 옮길 준비가 되었습니다.

 

순서대로 하면 parcel에 data를 쓰고, 즉 flatten해주고 이것들을 담은 parcel을 가져와 생성자를 이용해 객체를 만들어주게 됩니다.


데이터 옮겨서 확인하기

자 그럼 이제 데이터가 잘 옮겨지는지 확인 해봅시다.

예제는 상당히 간단하니, 코드만 보여드리고 MainActivity의 레이아웃에는 버튼 하나만 추가된 상태입니다!(쉽게 따라할 수 있게 하기 위해서)

이제 putParcelableArrayListExtra를 사용할 수 있습니다.

putExtra에도 배열을 보낼 수 있습니다. (putExtra의 한계는 어디까지인지? 확인안해봄.여기서 중요한건 아니니)

설명이 따로 필요가 없습니다. 바로 결과를 확인해보죠

결과 액티비티는 이렇게 만들었구요. 레이아웃을 사용하지 않기 위해서 로그창으로 띄웠습니다.

추가로 객체만 보냈을 때의 주석을 보시면, 저런 식으로 받을 수 있습니다. 참고!

 

결과

 

 

Reference

http://aroundck.tistory.com/57

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

안드로이드 toolbar 만들기  (0) 2018.08.16
안드로이드 Tab 만들기  (0) 2018.08.15
Volley 사용하기(GET, POST)  (0) 2018.08.06
Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25

Volley라는 라이브러리는 안드로이드로 서버와 통신함에 있어서 좀 더 빠르고, 효율적으로 코딩을 할 수 있게끔 도와주는 라이브러리입니다. (더 좋은 라이브러리도 있으니 찾아보시고, 보편적으로 사용되는 겁니다. 쓰기도 쉽구요)

먼저 처음에 Gradle에서 implement를 해야겠죠?

implementation 'com.android.volley:volley:1.1.0'

Gradle에 그대로 넣어주시면 됩니다.

다음으로 이제 본격적으로 사용하시면 되는데요.

 

사용하기전에 Queue, port, host는 미리 정의해 주시는게 사용하기 편리합니다.

대표적으로 GET방식과 POST방식에 이 있는데요.


GET 방식

이 방식은 우리가 서버로부터 어떤 데이터를 전달받고 싶을 때 사용합니다.

StringRequest를 사용하는데요. 괄호 안에다가 parameter를 총 4개를 입력해주게 됩니다.

  1. 방식(GET이냐, POST냐)
  2. url
  3. 서버 응답시 처리할 내용.
  4. 에러 시 처리할 내용

그리고 마지막으로

이미 사용한 것은 제거해주는 식으로 캐시를 관리해야 하니, setShouldCache(false);를 해주고,

마지막으로 큐에 add(Stringrequest)를 해주어 처리를 하게 됩니다.


POST방식

이 방식은 우리가 어떤 데이터를 서버에 보낼 때 사용하게 됩니다.

형식은 GET방식과 대부분 비슷하지만, getParams라는 override method가 추가됩니다.

끝에 getParams()라는 메소드가 추가되었죠? 이 부분이 서버가 요청하는 파라미터를 담는 부분입니다.

예를 들어, 서버가 id와 password를 요청한다면, 

Map<String, String> params = new HashMap<>();

paramas.put("id", "~");

params.put("password", "~");

해주고 return params를 하면 되겠죠?

 

여기까지 Volley에서 GET, POST방식의 이용법이었습니다. 사용하실 때 에러가 난다면,

기본적으로 

  1. 와이파이 등을 확인해서 서버연결을 할 준비가 되었는지 확인하세요.
  2. 서버가 요구하는 파라미터와 내가 코딩한 파라미터에 문제가 없는지 확인하세요.

 

Reference

edwith, 안드로이드 부스트코스 과정

 

종종 사용하던 어플을 보면, 왼쪽 상단에 햄버거모양으로 되어 있는 아이콘을 보실 수 있습니다.

이 아이콘을 클릭하면 왼쪽에서 오른쪽으로 작은 창이 열리면서, 여러 기능을 사용할 수 있는데요.

이를, 네비게이션 뷰라고 칭합니다.

 

편하게도 네비게이션 뷰의 전체 틀은 구글에서 제공해주고 있습니다.

에뮬레이터로 실행을 시켜보시면, 밑의 플로팅 버튼과 네비게이션 뷰를 볼 수 있습니다. 일단 이 글에서 플로팅 버튼을 다루는 게 아니기 때문에 mainActivity에서 플로팅버튼 관련 코드는 삭제해도 무방합니다 ^^


layout 에 보시면 총 4개의 파일을 볼 수 있는데요.

activity_main, app_bar_main, content_main, nav_header_main

근데 너무 많아서 관리하기가 어려워요. 그래서 activity_main에 보시면 <include ~ 라고 된 부분이 있을거에요

이 부분은 app_bar_main이라는 xml을 담고 있네요? 그러면 app_bar_main을 가서 복사를 하시고

include부분에 붙여넣기를 해줍니다.

빨간색으로 된 부분이 추가된 부분이고, 이제 layout에서 app_bar_main은 삭제하구요.

또 코드 안에 보시면 include가 하나 더 있죠? 

이번에는 content_main이라고 되어 있네요. 이 부분에 여러분이 작업을 하시면 되고 include는 지워줍시다. 

(보통 FrameLayout을 추가해서 프래그먼트로 사용하죠)


다시 네비게이션 뷰를 펼쳐보시면, 윗 부분에는 프로필, 아래에는 기능이 있을 거에요.

프로필 부분은 nav_header_main.xml에서 여러분이 원하는대로 변경하실 수 있구요.

여기서는 밑의 기능 부분을 보겠습니다.

기능은 아마 네비게이션 뷰를 만들면서 구글에서 menu파일을 만들어 주었을 거에요. 그 안에 보시면 activity_main_drawer.xml이 있을겁니다.

여기서 다른 부분은 그냥 item만 여러분이 원하시는대로 변경하시고, 맨 위에 checkableBehavior가 있을 거에요. 이 부분을 저대로 두고 실행을 시켜보고 기능을 눌러보세요.

그러고 다시 네비게이션 뷰를 켜보세요. 그러면 포커싱이 내가 전에 누른걸로 포커싱이 맞춰지게 되죠?

만약에 포커싱을 주고 싶지 않고, 다시 열었을 때 clear한 것을 원한다면, single -> none 으로 바꿔 주시면 됩니다.

 

또 각 아이콘에 기능을 넣고 싶다면

mainActivity에서 onNavigationItemSelected메소드를 수정해주면 되겠죠?

 

구글링하면 누구나 해결방법을 아래와 같이 볼 수 있는데..

 

android:elevation -> 0dp

하지만, 가끔 이게 동작되지 않을 때가 있는데 그럴 경우엔

app:elevation -> 0dp 

로 해주면 작동이 잘 되는것을 확인할 수 있다. 

 

 

 

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Volley 사용하기(GET, POST)  (0) 2018.08.06
Nevigation View 만들기  (0) 2018.07.26
Fragment(프래그먼트) 만들기  (0) 2018.07.15
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(2)  (0) 2018.06.18

요즘 앱을 사용하시면 거의 모든 것들에서 프래그먼트를 상뇽하고 있다는 것을 쉽게 알 수 있습니다.

그만큼 효율적이고, 잘만 만든다면 코드도 간략해 질 수 있습니다.

 

프래그먼트를 만들려면 2가지 준비물만 만드실 수 있으시면 됩니다.

1. Java Class

2. layout XML

2가지를 만들수만 있다면, 몇 가지 코드만 작성하면 프래그먼트를 만들 수 있는데요.

---------------------------------------------------------------------------------------------------------------------------

Fragment 만들기

1. Java Class파일에 Fragment를 extends하기. 

2. Activity에서도 onCreate가 있듯이, 프래그먼트도 그와 같은 역할을 하는 메소드가 있습니다.

사진과 같이 onCreateView라는 메소드입니다. 

이제 이 안에서 return 부분을 지워주시고, 밑의 두  사진과 같이 입력해주시면 됩니다.

 

* R.layout.fragment_exam은 여러분이 만든 layout파일입니다. container은 메소드에 있는 ViewGroup parameter을 그대로 써주시면 됩니다.

* attachToRoot는 activity화면에 프래그먼트를 바로 붙여줄 것인지, 호출 시에 붙여줄 것인지를 정하는 파라미터입니다. false해주시면 됩니다.

 

3. 위에서 사용햇듯이, layout파일은 여러분이 만든걸로 ^^

자, 그럼 이제 프래그먼트를 액티비티에 올릴 준비가 되었습니다.

mainActivity로 가볼까요?

이 mainActivity에는 container라는 id를 가진 FrameLayout이 있다고 가정하겠습니다. 

프래그먼트를 붙일려면 단 한줄의 코드만 작성해 주시면 됩니다.

프래그먼트는 기본적으로 액티비티와는 조금 다른 구조를 가지게 됩니다.

 Transaction을 통해 시작을 시켜야만 하는데요. 이 모든것이 한줄에 다 들어갈 수 있습니다. 

 

* R.id.container은 위에서 가정한 FrameLayout입니다. 

* fragmentExam은 Fragment를 상속받은 Java Class입니다. 

* commit() 또한, 빼먹지 말아야 합니다.

 

onCreate에 작성하시고 실행시키면 여러분이 만든 프래그먼트가 activity에 올려져 있을겁니다.

 

+) add는 되도록이면 처음 프래그먼트를 넣어줄때만 쓰시는게 좋습니다. 나머지는 전부 add가 아닌 replace를 쓰셔야 합니다.

(쓰는 방법은 똑같습니다^^)

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(2)  (0) 2018.06.18
Android Project Review with BP(1)  (0) 2018.06.16