반응형

이번 포스팅에서는 객체를 Intent를 통해 전달하는 방법을 알아보겠습니다. 


정수같은 단순한 값은 크기도 작고 접근 속도도 빨라 저장하고 복귀하기 쉽습니다. 그러나 단일 값이 아닌 큰 객체나 배열을 저장할 때는 최대한 신속하게 저장하기 위해 좀 더 효율적으로 데이터 처리를 해야 합니다. 


객체를 저장할 때는 자바의 Serialize 기능을 사용하면 쉽게 구현할 수 있습니다. 자바는 언어 차원에서 객체를 일차원의 데이터로 저장하는 기능을 제공하는데 이 기능이 바로 Serialize 입니다. Serializable 인터페이스를 상속 받으면 디폴트 직렬화 알고리즘이 적용되어 클래스의 모든 인스턴스 필드가 순서대로 저장이 됩니다. 


1. 먼저 Intent로 전달한 객체에 Serializable 인터페이스를 상속 받습니다. 

   아래 그림처럼 빨간 네모 박스가 Serializable 인터페이스를 상속받은 구현방법입니다.



2. Serializable 인터페이스를 상속받은 객체를 Intent에 담아 전달 받을 클래스로 보냅니다.

   (※ Intent로 전달하기 전에 전달 받은 클래스가 AndroidManifest.xml에 등록이 되어 있어야 합니다.)



3. Intent를 전달받은 클래스에서는 getSerialzableExtra() 메소드로 불러오기만 하면 됩니다. 



- 아래는 결과 값인 Logcat 메시지 입니다.


참 간단하죠? 예제 소스를 압축 파일로 올려 놓았으니 필요하신 분들은 다운받아 실행해 보시면 좀 더 이해하기 쉬우실 것 같습니다. 

다음에 알차고 좋은 내용으로 찾아 뵙겠습니다.


SerializableExam.zip


반응형
반응형

이번 시간에는 우리가 가장 많이 쓰는 ListView의 계층 구조에 대해 알아보겠습니다. 


- 먼저 ListView에 대해 알아보도록 하겠습니다. 

   ListView는 여러개의 항목을 수직으로 표시하는 위젯입니다. 

   수직 스크롤을 지원하므로 항목의 개수가 아무리 많아도 모두 표시할 수 있는 장점이 있습니다.


- ListView의 계층 구조를 먼저 그림으로 알아보도록 하겠습니다.




- 안드로이드 개발을 할 때 ListView, GridView, Spinner, Gallary 를 오버라이딩 해서 UI를 구성하는 경우가 많이 있습니다. 

  이들을 묶어서 AdapterView라고 부르며 집합을 화면에 표시한다는 면에서 기능적으로 동일합니다.


- 이 위젯들을 AdapterView 라고 부르는 이유는 표시할 항목 데이터를 직접 관리하지 않고 Adapter 객체로부터 공급받기 때문입니다. 즉, Adapter 객체는 원본으로부터 얻은 데이터를 관리하며 AdapterView는 Adapter가 전달한 데이터를 화면에 표시하는 식으로 분업화 합니다.


- 그림으로 도식화하면 아래와 같습니다.




- 그럼 데이터를 담당하는 Adapter 계층 구조를 살펴보도록 하겠습니다.




- 최상위 Adapter 인터페이스는 AdapterView와 데이터간의 연결을 제공하고 항목의 집합을 관리하는 기본적인 메서드를 선언합니다. 그리고 BaseAdapter는 상위 객체인 ListAdapter와 SpinnerAdapter의 공통적인 기능을 구현합니다. BaseAdapter의 getView 메소드를 오버라이딩 하여 화면을 구성하게 됩니다.


- BaseAdapter의 하위 객체는 데이터의 원본에 따라 나뉘어 집니다. ArrayAdapter는 배열이나 리소스에 정의된 배열로부터 데이터를 가져오며 CursorAdapter는 데이터베이스로부터 데이터를 가져오며 SimpleAdapter는 XML 파일의 정적인 데이터를 원본으로 가져옵니다.


이번 시간에는 Adapter와 AdapterView 의 유기적인 관계와 각 객체의 계층구조를 알아보았습니다. 

다음 시간에는 좀 더 자세한 구현 방법에 대해 알아보도록 하겠습니다.


반응형
반응형

이번 포스팅에서는 일부 폰에서 일어나는 Webview 오류에 대해서 알아보겠습니다.


제가 삼성 스마트폰과 LG 스마트폰에서 테스트 결과 삼성 스마트 폰에서는 이상이 없었지만 LG 스마트 폰에서는 Webview 화면에서 '010-1234-5678' 형식이 있다면 전화걸기 화면으로 연결이 됩니다. 


그러나 전화걸기 권한이 AndroidMenifest에 설정되어 있지 않다면 오류 화면을 보여지게 됩니다.



해당 오류를 수정하기 위해서는 아래와 같은 작업을 해 주어야 합니다.


private class CustomWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

// 전화걸기 오작동 막기

if (url.startsWith("mailto:") || url.startsWith("tel:")) {

          return false;

      }

      view.loadUrl(url);

      return true;

}

}


반응형

+ Recent posts