ScrollViews vs ListViews – Developing Android Apps

항목 목록을 생성하는 것은 표면적으로는 단순합니다 안드로이드에는 포함된 ScrollView에는 어떤 선형 레이아웃(LinearLayout)이라도 넣을 수 있어서 그 안의 각 항목을 수직 리스트로 배열해 줍니다 선형 레이아웃 밑으로 떨어져 현재 UI에 보여지지 않는 항목에 주의하세요 ScrollView는 이름대로 사용자들이 레이아웃의 내용을 스크롤해 볼 수 있게 해 줍니다 그러나 메모리가 제한되어 있으며 터치 반응이 정말 중요한 기기에서는 이용하는 데 어려움이 있습니다 만약 리스트에 50개의 항목이 있고 화면에는 언제나 10개 항목까지 출력할 수 있다면 리스트에 있는 모든 항목을 스크롤하기 위해 생성해야 할 뷰는 최소 몇 개일까요? 정답은, 바로 확실하게 나오지는 않겠지만 전체 리스트를 보여주기 위해 사용된 ListView의 사용을 더 효과적으로 할 수 있는 방법에 대해 생각해 보세요

JSON Parsing – Developing Android Apps

우리는 FetchWeatherTask가 문자열 예측 배열을 반환하기를 원합니다 즉, AsyncTask 반환 형식을 다음과 같이 수정해야합니다

문자열 배열 결과는 doInBackground 메소드가 리턴합니다 문자열 배열 ,이 방법은 서버 쿼리 후 입력 스트림에서 읽기이 코드를 실행합니다 , 서버에서 들어오는 응답을 분석합니다 getWeatherDataFromJson을 요청합니다

JSON 예측 문자열과 예상 일수를 전달합니다 이 작업이 완료되었는지 확인하려면 올바른 문자열 배열을 반환하십시오 메소드를 입력하고 메소드의 맨 아래에 추가 할 수 있습니다 문자열 배열의 각 요소를 인쇄하는 일부 레지스트리 문 코드를 컴파일 할 때 컴퓨터에서 실행하십시오 새로 고침 버튼을 눌러 서버에서 데이터를 검색 할 수 있습니다 log cat을 열면 올바르게 파싱 된 것을 볼 수 있습니다

모든 예측 항목이 인쇄 된 것을 볼 수있는 곳

JSON Parsing – Developing Android Apps

JSON 데이터를 분석하는 방법을 배우고 나면, 우리가 읽은 나머지 필드를 분석 할 수 있습니다 이 세션은 Java 또는 JSON, 아래 요약에서 분석 코드를 제공합니다

결론은 다음과 같습니다 지원 방법에는 세 가지가 있습니다 약속의 첫 번째 조정 그리고 온도 근사에있어서 두 번째 세 번째는 JSON 시리즈의 일기 예보를 일련의 예측으로 반환하는 것입니다 이 방법은 또한 각 기상 예측 실체 기존 날짜부터 시작하여 매일 하나씩 늘립니다 우리는 숫자 인 그레고리력도 사용합니다 그레고리력이 시작된 이래로부터의 일 아래의 트레이너 노트에 자세한 내용이 나와 있습니다

본 신청서에서이 날짜를 일관되게 처리하는 방법과 관련이 있습니다 ,이 방법은 날짜를 비교할 때 걱정할 필요가 없습니다 시간대를 고려하거나 일광 절약 시간제 사용 날씨 검사 작업을 업데이트하여 이러한 보조 기능을 사용하십시오 doInBackground 메서드는 일련의 일기 예보 배열로 반환되어야합니다 출력을 등록하여 그룹이 올바른지 확인할 수 있습니다 일기 예보의 모양은 다음과 같이 보일 것입니다

JSON Parsing – Developing Android Apps

우리는 FetchWeatherTask가 기상 문자를 배열로 돌려주기를 원합니다 async task의 return type를 수정할 필요가 있다는 뜻이죠 그 다음 doInBackground 메소드에서 입력 문자를 읽은 뒤 이 코드를 실행합니다 helper 메소드와 getWeatherDataFromJson를 불러서 forecastJson 문자뿐만 아니라 기상 날짜의 수까지 전달합니다 변환에 문제가 있을 떄는 Json exceptions을 잡아냅니다 기상 데이터의 문자 배열이 맞는지 확인하고 싶으니까요 getWeatherDataFromJson 메소드 안에서 배열의 각 요소를 출력하도록 일부 로깅 선언문을 추가했어요

ListView and Recycling – Developing Android Apps

ListView는 눈에 보이는 모든 항목에 뷰를 요청하며 시작합니다 그래서, 여러분의 대다수는 화면에 맞출 수 있습니다 또한, 새로운 뷰가 생성되고 채워지면서 흔들림 없이 스크롤 할 수 있음을 확인 하기 위해 양 방향으로 한 쌍을 생성할 것입니다 그 다음, 적절한 때에 새로운 항목을 생성합니다 그래서 그것은 사용자에게 보여질 수 있도록 다음 차례로 옵니다 그래서, 만약 사용자가 리스트의 아래에서 스크롤 하지 않는 다면 ListView는 Adapter에서 뷰를 요청하지 않을 것입니다 그러나 이것은 어설플 뿐입니다 여러분이 보시는 것과 같이 만약 사용자가 계속해서 스크롤하면 비록 그들이 스크린의 위에서 부터 사라진다고 하더라도 우리는 계속해서 새로운 뷰를 추가 할 수 있을 것입니다 결국 그것은 메모리 사용과 실행에 동일한 영향을 주는 것입니다 우리가 처음부터 직접 모든 뷰를 생성해온 것처럼 말이죠 해결 방법은, 화면에서 스크롤하여 사라질 때 각각의 뷰를 재활용하는 것입니다 위 또는 아래에 있는 뷰로 이동 할 때 다른 항목을 봐야 할 경우 재사용되도록 만드는 것이죠 그래서, 생성하기보다는 그것이 뷰에 보여질 때 리스트의 각 항목의 메모리를 저장하여 우리는 단지 눈에 보이는 항목과 각 옆면의 쌍의 개수에 대한 단계를 생성하면 됩니다 그런 다음, 새로운 리스트 항목이 뷰로 들어올 때마다 휴지통에 있는 항목 중 하나에 표시된 데이터를 업데이트 하면 됩니다

그 결과는 어떨까요? 더 적은 메모리 부담, 훨씬 부드러운 스크롤 그리고 여러분이 관리해야 하는 뷰가 적어집니다 이런 동일한 재활용 작용은 모든 Adapter View의 하위 클래스, 즉 GridView, ListView와 같은 하위 클래스에 걸쳐 실행 됩니다 그것은 또한 Adapter가 스스로 조절하는 이러한 일에 직접 가담하지 않는 이유를 소개합니다 그들을 계속해서 분리하면서 Adapter는 각각의 숨은 데이터 요소들의 표시 방식을 정의하는 반면 Adapter View를 실행하는 것 자체는 각각 의 요소들이 펼쳐지는 방식을 제어하게 됩니다 그것을 이러한 특정 예제로 List 또는 Grid가 되게 하세요

JSON Parsing – Developing Android Apps

JSON 데이터를 변환하는 방법을 배우고 나면 우리가 필요한 나머지 필드를 변환하기는 아주 쉽습니다 이것은 Java나 JSON에 관한 코스가 아니므로 아래 gist에서 변환 코드를 제공하겠습니다 gist는 이렇게 보이는데요 3가지 헬퍼 메소드가 있어요 첫번째는 날짜 포맷입니다 두번째는 온도를 반올림하는 거구요 세번째는 forecastJsonStr을 기상 예측 배열로 바꾸는 겁니다 이들 유용한 기능을 써서 Fetch Weather Tasks를 업데이트하세요 백그라운드 메소드에서 do는 기상의 문자 배열을 돌려줄 것입니다 그 배열이 맞는지 확인하기 위해서 결과를 로그할 수 있어요 하루의 날씨 포맷은 이렇게 보일 겁니다

Add ListView to layout – Developing Android Apps

고마워요, Rado 이제, 우리는 ListView 이용의 확실한 이점을 알고 App에 일기예보 목록을 표시하기 위해 ListView를 사용할 수 있습니다 이제, 이를 수행하기 위해서는 레이아웃 폴더의 어떤 파일을 수정하는게 좋을까요? 우리는 프래그먼트에 직접 ListView를 추가하려고 합니다 여러분이 fragment_mainxml 파일을 열었다면 여러분은 레이아웃이 하위속성 TextView 뿐만 아니라 상위속성 뷰로서 상대적 레이아웃을 포함한다는 것을 알아챌 것입니다 이 파일을 수정해서, 우리가 TextView 대신 ListView를 보여주고 그것의 ID를 ListViewForecast로 배정하여 나중에 참조할 수 있도록 하세요 또한, 이 레이아웃은 하위 항목의 뷰만을 포함하고 있기 때문에 실제로 상대적 레이아웃(RelativeLayout) 대신 프레임 레이아웃(FrameLayout)으로 변경하는 것이 훨씬 효율적일 것입니다 변경을 했다면, 컴파일하고 앱을 실행시키세요 여러분은 빈 화면을 보고, 조금 실망할 것입니다 그러나 괜찮습니다 그건 우리가 ListView에 데이터를 아직 채우지 않아서 그렇습니다 추후 단계에서 할 거에요 다 끝나면, 박스를 체크하세요

Add ListView to layout – Developing Android Apps

여러분은 TextView를 ListView요소로 변경 했어야 합니다 그러면 여러분은 더 이상 필요 없는 텍스트 속성을 제거할 수 있습니다 UX mocks 에서 배웠던 List가 전체 화면을 차지한다는 것을 기억할 것입니다 이제 우리는 match_parent가 되는 넓이와 높이를 설정하고자 합니다 이는 ListView가 상위항목의 크기에 맞도록 해 줄 것이며 이것은 상대적 레이아웃(RelativeLayout)입니다 그리고 이 상대적 레이아웃(RelativeLayout)의 상위 항목을 알기 위해서는 그것은 프래그먼트가 Activity 내에 포함되어 있기 때문에 실제로 activity_main XML 파일 안에 있습니다 이 파일 내에서, 우리는 또한 높이와 넓이에 대한 match_parent를 보게 됩니다 그래서 이제 우리는 ListView가 실제로 전체 스크린을 차지한다는 것을 확인할 수 있습니다 프래그먼트 메인 파일로 돌아가서 ID, ListView_forecast, onto the ListView를 추가할 수 있습니다 그런 다음, 레이아웃은 하나의 하위 항목만을 포함하기에 우리는 프레임 레이아웃으로 이를 변경하여 레이아웃을 간소화시킬 수 있습니다