RecyclerView Animators

https://github.com/wasabeef/recyclerview-animators

Android View Animations

https://github.com/daimajia/AndroidViewAnimations

android-flip

https://github.com/openaphid/android-flip

android-pagecurl

https://github.com/harism/android-pagecurl

Android Sliding Activity Library

https://github.com/klinker41/android-slidingactivity

original source : https://youtu.be/1P9eV0ExuZ0

image

=========================================================

.

.

image

obtainMessage()는 pool에 있는 이미 만들어진 남는 Message를 가져온다.

=========================================================

.

.

image

obj를 통해 Message에 데이터를 전달할수 있지만 간단한 정수만을 사용해도 되는 경우 arg1, arg2를 이용한다. 

=========================================================

.

.’

image

=========================================================

.

.

image

handler의 sendMessage()를 통해 Message가 queue에 올라 가게 된다.

=========================================================

.

.

image

=========================================================

.

.

image
image
image
image

=========================================================

.

.

image

post()를 통해 Message가 아닌 Runnable을 queue에 올려 놓을 수 있다.

=========================================================

.

.

image

=========================================================

.

.

image

=========================================================

.

.

image

handler가 아닌 위의 방법들로 main thread에 접근가능하다.

=========================================================

.

.

image

=========================================================

.

.

image

=========================================================

.

.

image

=========================================================

.

.

image

=========================================================

.

.

image

AsyncTask<>의 첫번째 arg는 doInBackgroun에 전달되는 arg이다. 

두번째 arg는 onProgressUpdate()에 사용되는 arg이다.

세번째 arg는 onPostExecute()에 사용되는 arg이다.

image

=========================================================

.

.

image
image
image
image

original source : https://youtu.be/qt-l0MIdhTM

image

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

ThreadPoolExecutor를 이용해서 ThreadPool을 만든다.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

original source : https://youtu.be/T70wZf7KoI4

===========================================================

.

.

.

===========================================================

.

.

.

===========================================================

.

.

.

===========================================================

.

.

.

===========================================================

.

.

.

===========================================================

.

.

.

===========================================================

.

.

.

original source : https://youtu.be/6YZY5S7XvtM

image

add, replace에만 tag를 정의 할수 있다. 더해지는 fragment에 tag를 정의하고 나중에 접근 가능하게 한다.

===========================================================..

.

.

image

tag를 상수로 정의해서 사용하는 것이 편리하다.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

위의 코드에서는 b bundle이 실제 있는지 확인하고 작업을 수행하는 것을 추천한다.

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

fragment안에 fragment가 있는경우 겹겹으로 listener를 만들어 activity에 정보를 제공할수 있다.

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

startActivityForResult()의 사용법은 activity의 것과 유사하다. 단 REQUEST_CODE가 2바이트 크기가 된다.

fragment안의 fragment에서는 startActivityForResult 를 사용할수 없다.

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

===========================================================..

.

.

image

getActivity()를 사용해도 되고 getContext()를 사용해도 된다.

original source : https://youtu.be/tg36VJUkE4s

image

===========================================================

image

===========================================================

image

===========================================================

image
image

===========================================================

image
image

===========================================================

image

일반 api 11 이후의 activity를 사용하는 경우 android.app.fragment가 참조명이 될것이고 support library를 사용하는 경우 android.support.v4.fragment 와 같은 형태가 될것이다.

===========================================================

image

===========================================================

image
image

android studio에서 fragment를 만드는 과정을 보여주고 있다.

===========================================================

image

하단의 내용 inflater.inflate(R.layout.fragment_first, container, false)는 fragment_first를 생성하되container에 fragment_first를 덧붙이지는 말라는 뜻이다. 덧붙이는 작업은 fragment manager가 알아서 하기때문이다.

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

<fragment>를 이용해서 만들수도 있고 아래 아래와 같이 일반 layout에 틀을 만들고 그곳에 덧붙일수도 있다.

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

activity가 어떤 이유로 close되어야 하는 경우 기존 activity의 정보를 bundle의 형태로 기억하고있다가 다시 생성될때 추가한다. 이때 activity가 fragment의 상태를 유지한다. 그런데 위의 코드와 같은 경우 replace 대신에 add를 사용하는 경우 시스템이 activity를 다시 띄울때 복구시킨 fragment에 또 fragment를 더하기때문에 중복이 될수 있다.

original source : https://youtu.be/FQ270Hsczig

image

google에서는 모든 데이터를 가져오는 작업을 loader를 통해 하기를 권장한다. 그래서 때로는 custom loader제작이 필요해진다.

===========================================================

image
image

loader의 한 종류로 AsyncTaskLoader, CursorLoader등등이 있다.

===========================================================

image
image

loader의 메소드를 보여주고 있다.

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

===========================================================

image

LoaderCallbacks<Cursor>에서 Cursor는 loader가 리턴하는 데이터 타입이 Cursor이기 때문에 Cursor로 기입되었다. 

===========================================================

image

adapter의 changeCursor를 쓰지만 CursorLoader의 경우 Cursor close작업은 CursorLoader에서 이미 처리했으므로 adapter에서 다시 중복해서 할피요가 없으므로 close작업을 하지 않는 swapCursor를 이용했다.

===========================================================

image

AsyncTaskLoader에서는 데이터를 가져오는 작업을 loadInBackground에서 한다.

===========================================================

image

===========================================================

image