반응형
* 본 포스팅은 필자가 개인적으로 학습한 내용정리 및 리뷰를 위해 포스팅합니다.
- ViewFlipper를 사용하여 촬영한 사진을 보여주고 여기에 사진의 저장기능을 추가하는 코드의 일부분이다.
// 호출할 다이얼로그 함수를 정의.
public void callFunction(ArrayList<Bitmap> bitmaps) {
//커스텀 다이얼로그를 정의하기 위해 Dialog클래스 생성
final Dialog dlg = new Dialog(context);
//액티비티의 타이틀바를 숨김
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
dlg.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//커스텀 다이얼로그의 레이아웃 설정
dlg.setContentView(R.layout.pictureview_dialog);
//커스텀 다이얼로그 노출
dlg.show();
//ViewFlipper 객체 참조
flipper = (ViewFlipper)dlg.findViewById(R.id.flipper);
viewpicture_dialog_count = (TextView) dlg.findViewById(R.id.viewpicture_dialog_count);
- 위 코드는 앞서 촬영한 Bitmap의 사진을 flipper로 띄우는 과정의 일부분의 코드이다.
//저장기능 추가
viewpicture_dialog_imagesave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlerDialog.Builder(context);
builder.setTitle("사진저장");
builder.setMessage("사진을 저장 하시겠습니까?);
builder.setPositiveButton("저장", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
imageView.setImageBitmap(bitmaps.get(flipper.getDisplayedChild()));
dlg.dismiss();
}
});
builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
});
- flipper내의 저장 버튼을 눌렀을 때의 실행 코드이다.
- callFunction()의 내부에 포함되어 있으며 받아온 bitmaps를 이용하려 했지만 imageView.setImageBitmap 내에서 bitmaps가 에러가 발생한다. 알아보니 이유는 간단했다
- bitmaps는 전역변수도 아니고 onClick()의 지역변수도 아니다.
- onClick()은 callFunction()이 실행될 때 실행되는 것이 아니라 클릭 이벤트가 발생 시 실행할 메서드로 등록할 뿐이다.
- 에러의 발생이유는 bitmaps가 callFunction()이 리턴되면 사라지는 변수일 뿐이었다. 값을 참조할 수 없다
- 하지만 여기서 bitmaps에 final을 붙이게 되면 변경 불가능한 상수가 되므로 존재하여 읽을 수 있게 된다.
public void callFunction(final ArrayList<Bitmap> bitmaps)
결론
리스너 내부에서 사용되거나 변수의 데이터 유지에 관하여 한번더 확인하고 final이라는 개념에 대해서 다시 한번 알게 되었다.
반응형
'안드로이드' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 1. 레이아웃 만들기 (0) | 2021.06.10 |
---|
댓글