출처 : Bill  Phillips, Android Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides) 3st Edition

■ 로그

1
2
public static int d(String tag, String msg)
 
cs
1
2
3
4
5
6
7
 @Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate(Bundle) called");
setContentView(R.layout.activity_quiz);
 }
cs


■ 로테이션과 액티비티 라이프사이클

- 디바이스가 로테이션될때, 액티비티의 인스턴스는 destroyed되고 새로운 인스턴스가 생성된다. 

- 디바이스 로테이션은 디바이스 설정을 바꾼다. 디바이스 설정은 개별 기기의 현재상태를 결정하는 특성이다. 스크린방향 등

- 키보드 사용가능, 언어, 멂티윈도우 모드, 스크린 방향등은 런타임시 바꿀수 있따.

- 안드로이드는 디바이스 로테이션시 기존의 인스턴스를 destroy하고 새로운 디바이스 설정에 맞는 리소스(레이아웃)을 찾아 인스턴스를 실행한다..

- ex) landscape layout을 res폴더 우클릭 -> UI모드 -> landscape선택을 통해 만들면 디바이스 로테이션시 landscape 사용

- FrameLayout : 위젯들이 android:layout_gravity 속성을 통해 (ex>center_horizental, bottom_right) 정렬된다. 주로 여러 Fragment를 동일한 위치내에서 교차하여 표시하고자 할때사용.

- LinearLayout: 여러 View 위젯들을  한줄의 가로 또는 세로 방향으로 나열할 때 사용하는 Layout 클래스. 위젯을 비율,dp등으로 크기지정



■ 로테이션간 데이터 전달

  • 로테이션 등을 디바이스 설정이 바뀔때, 이전 디바이스 설정에서 이루어진 액티비티의 값을 새롭게 생성되는 액티비티에 전달하는방법
  • 그거슨 바로 onSaveInstanceState(Bundle outState)이다.
  • onSaveInstanceState(Bundle outState)은 onStop()이 실행되기 전에 호출된다. 
  • 단, 유저가 백버튼 눌렀을때는 onSaveInstanceState(Bundle outState)이 실행되지않는다. 왜냐면 백버튼 눌렀을 경우 인스턴스가 아예메모리에서 삭제되기 떄문. onStop은 아직 메모리에 남아있는상태를 의미한다.
  • Bundle : Key,Value 쌍으로 이루어진 데이터 구조이다.
  • onSaveInstanceState(Bundle outState)은 번들에 데이터를 저장하고, onCreate(Bundle)에서 다시 읽는 방식으로 사용한다.

       1. 키값추가

1
2
3
4
5
public class QuizActivity extends AppCompatActivity {
 private static final String TAG = "QuizActivity";
 private static final String KEY_INDEX = "index";
 private Button mTrueButton;
 
cs

  2. putInt로 번들에 집어넣기

1
2
3
4
5
6
7
8
 @Override
 public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Log.i(TAG, "onSaveInstanceState");
savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);
 }
 
 
cs

3. Bundle에 저장한 값을 onCreate에서 받아오기

1
2
3
4
5
6
7
8
9
10
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Log.d(TAG, "onCreate(Bundle) called");
 setContentView(R.layout.activity_quiz);
 if (savedInstanceState != null) {
 mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
 } 
 }
 
cs


■ 액티비티 라이프사이클


-Stashed : 액티비티의 객체는 남아있지 않지만 OS가 다시 되살릴수 있는 상태

- onStop: 유저가 수정한 값 등의 영구저장 데이터를 저장할때 사용

- onSaveInstatnceState(Bundle) : 임시값을 저장할때 사용


'Web Programming > Android' 카테고리의 다른 글

7. UI Fragments and the Fragment Manager  (0) 2018.08.20
5. Your Second Activity  (0) 2018.08.16
2. Android and Model-ViewController  (0) 2018.08.14
1. Your First Android Application  (0) 2018.08.14

1
private int mTextResId;
cs

리소스 아이디는 int로 구분되기 때문에 리소스 멤버변수는 int형이어야한다.


■ Activity가 Controller의 역할을 한다.

- Activity에서 layout을 멤버변수로 사용하여 interaction을 제어한다.

■ MVC 모델의 장점 -> 재사용성


'Web Programming > Android' 카테고리의 다른 글

7. UI Fragments and the Fragment Manager  (0) 2018.08.20
5. Your Second Activity  (0) 2018.08.16
3. The Activity Lifecycle  (0) 2018.08.14
1. Your First Android Application  (0) 2018.08.14

1.Reosurce

- 리소스는 이미지파일, XML파일 등을 의미함
- 리소스를 코드 내로 불러오기 위해서는 리소스ID를 사용한다. ex) R.layout.activity_quiz
- layout에는 id가 자동 생성되지만 widget은 별도로 id를 지정해주어야한다.
- widget에 대한 참조변수 만들기 : mTrueButton=(Button) findViewById(R.id.true_button);
- 리스너 : 
1
2
3
4
5
6
mTrueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(QuizActivity.this, R.string.correct_toast, Toast.LENGTH_SHORT).show();
}
});
cs

2. 

1
2
3
4
5
6
7
8
9
<Button
android:id="@+id/false_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button" />
cs

@+id에는 + 기호가 있지만 @string 에는 기호가 없는 이유 : id는 새로 추가하는 것이지만 string은 string.xml에 저장된 값을 참조하는것이기 떄문이다.




'Web Programming > Android' 카테고리의 다른 글

7. UI Fragments and the Fragment Manager  (0) 2018.08.20
5. Your Second Activity  (0) 2018.08.16
3. The Activity Lifecycle  (0) 2018.08.14
2. Android and Model-ViewController  (0) 2018.08.14

프로젝트 우클릭 -> deployment asset -> web deployment assembly -> add -> java buildpath entries -> maven dependency

'Web Programming > Error' 카테고리의 다른 글

[Eclipse] 기본클래스를 찾을 수 없습니다.  (0) 2018.04.05

+ Recent posts