Android 中文教學 基礎/ 7-2 ListView – 2

당장 샘플 운동을 해보 죠 나는 그것을 더 빨리 설명 할 것이다

나중에 디자인 할 패턴 잠깐, 전화가 왔어 아래쪽은 우리가 디자인하고 싶은 ListView입니다 그리고 위에 나는 두 개의 버튼을 배치했다 새로운 데이터를 동적으로 추가하게하십시오 새로운 정보 그런 다음 어떤 조치를 취할 지 기다려 봅시다

이것은 새로운 것이다 또는 그 중 하나를 삭제하도록 수정되었습니다 둘 중 하나를 삭제하도록 수정 됨 상황은 여기에있다 여기의 개념은 이전 단원에서 언급되었습니다 나는이 부분을 별도로 디자인 할 것이다

내 레이아웃 중 하나가 되십시오 내 데이터가 여기 프로그램에 있습니다 이것을 정보라고 부릅니다 어떻게 제시 될 것인가? 개념 변조기가있을 것입니다 다음은 어댑터입니다

변조기로의 데이터 ListView 대리자 변조기 이러한 자료를 처리하려면 이것이 우리 프로그래밍의 개념입니다 데이터 전송 그것을 알고 난 후에? 레이아웃을 매우 빨리 처리해 보겠습니다 레이아웃의 일부가 매우 빠릅니다 LinearLayout을 여기에서 사용하고 있습니다 여기에 LinearLayout 사용 LinearLayout이 방금 본 개념은 수직입니다

그래서 나는 여기서 수직적 인 입장을 취하고있다 그룹을 형성하기 위해 위에 두 개의 버튼이 있습니다 LinearLayout과 같습니다 Match_parent, wrap_content는 괜찮습니다 여기에는 비례적인 원칙이 없습니다

즉, 위쪽 행을 차지합니다 다음은 ListView에 모두 주어진다 여기 방향은 수평입니다 두 개의 버튼 정렬 버튼 여기 너비 때문에 버튼 폭 그래서 나는 그것을 1 : 1로 다루고있다 높이 match_parent wrap_content와 동일 함 Wrap_content 무게는 1입니다

여기에 버튼이있을 것입니다 나는이 버튼을 새로운 것으로 생각한다 추가 텍스트 추가 버튼 함수를 기다리는 분 여기에 두 개 중 하나가 병치되어 있습니다 Ctrl + C 붙여 넣기 복사 이 하나 삭제 삭제 그래서 두 가지 간단한 모양 문제 없어요 전체 모양이 세로이므로 주인공 데뷔작에 직접 쓰세요

ListView 호출 너비 match_parent 너 밑에 아무것도 없다하더라도 match_parent를 주어도 상관 없습니다 나머지 공간에 남겨주세요 이 요소의 내용 때문에 요소 하지만 여기 없어요 그래서 우리는 여기에 있습니다 자체 포함 된 쓰기는 Button과 동일합니다

나는 여기있다 그래서 한번 보자 나머지 공간이 남을 때까지 기다리십시오 이것은 디자인입니다 알았어

디자인이 완료되었습니다 함수는 프로그램이 처리 될 때까지 기다리는 것입니다 그래서 이드에게 그것을주는 것을 잊지 마라 나는 그것에게 명부를 준다 이 두 버튼 기다리기 우리는 또한 그것에게 기능을 줄 것이다

그렇다면 먼저 onClick을 할 것입니다 add라고 직접적으로 불린다 여기서 onClick은 Del이라고합니다 이제는 프로그램이 작성되지 않았기 때문에 빨간색 단어가 나타납니다 그것은 중요하지 않습니다

자동적으로 일어나도록합시다 또는 프로그램에서 수동으로 우리는 여기에서도 그것을 볼 수 있습니다 나는 직접 매뉴얼이다 Del을 클릭하면 레이아웃을 되돌아 볼 수 있습니다 여기에서도 제거됩니다

문제 없음 좋아, 방금 언급했다 이 레이아웃 이 레이아웃을 위해 디자인하고 싶습니다 이 레이아웃은 어떻게 설계 되었습니까? 우리는 여기에있다 喔 이 레이아웃에도 동일합니다 레이아웃이라고 부르기 때문에 배치하는 것입니다 레이아웃 레이아웃 우리 그래픽 자료는 드로어 블을 넣습니다 다른 부대의 다른 부분을 소개하겠습니다

현재는 이쪽 만 터치하십시오 우리는 여기에 추가 할 것입니다 레이아웃 리소스 파일 이 옵션에서 안쪽을 클릭하고 내 물건 중 하나라고 말하십시오 물론, 당신 스스로 그것을 명명해야합니다 좋아, 여기서 우리는 한 가지를 본다

우리는 리소스 영역에 처음으로 파일을 추가했습니다 여기에 파일 이름에 대한 규칙이 있습니다 규칙이 있습니다 너 중국어에오고 싶지 않아 우선 먼저 처음 전체적으로 영어 문서 이름을 사용하십시오

이 파일 이름에는 공백이 없습니다 결론을 원한다면, 이 특별한 기호는 없어 첫 번째 문자 영어 문자가 있어야 함 item1을 one one으로 말할 수 있습니다 하지만 그것은 첫 번째 편지가 아닙니다 중요하지 않습니다

무시할 것이 한 가지 더 있습니다 모두 소문자 매우 중요해, 그래서 나는 두 번 말하고있다 모두 소문자 모두 소문자 3 번 말할 때 매우 중요합니다 모두 소문자 좋은 아이템, 디자인하자 직접 디자인 가장 기본적인 간단한 디자인 우리는 여기 있습니다, 나는 여기 있습니다

LinearLayout이 제공합니다 LinearLayout LinearLayout이기 때문에, 당신은 알 것이다 우리는 무엇을 주어야합니까? 오리엔테이션 그래서 우리는 또한 여기에 방향을 제시합니다 하지만 이미 자동으로 볼 수 있습니까? 아무 것도 없다면 우리는 스스로 와야합니다 오리엔테이션 너비가 꽉 차면, 나는 그것이 단지 아이템이기 때문에 그것이 가득해야한다고 생각한다

그래서 여기에 wrap_content를 주겠다 위장 바로 먼저 TextView를 디자인 해 보겠습니다 그리 많지 않다 잠깐, 재량에 따라 늘려 보자 좋은 TextView 너비 match_parent 높이 wrap_content 이것은 우리가 제시하고자하는 텍스트를 기다리고 있습니다

그렇지 않으면 나는 그것이 괜찮다고 가정합니다 잠깐, 우리가 제시하는 것은 음악의 제목은 좋습니다 그래서 저는 item_title에 왔습니다 이런 변수 이름 좋아, 여기 써라

나는 레이아웃에 대한 통제로 그것을했다 프로그램의 일부분을 작성하는 데 잠깐 기다려주십시오

Android 中文教學 基礎 / 7-1 ListView – 1

우리는이 부대에서 여러분 중 한 명을 알게 될 것입니다 Android의 앱 매우 일반적인 인터페이스 호출 된 ListView 이 일은 어떻게 생겼는지 이야기 해 봅시다

예를 들어, 먼저 모든 사람의 휴대 전화가 음악을 재생하는 프로그램이있을 수 있습니다 반드시 나와 같은 것은 아닙니다 그러나이 음악 프로그램은, 나는 그것을 넣었다 나는 그것을 주문할 것이다 내 음악은 모든 노래를 본다

이런 식으로 목록을 만들 때 여기에 정보가 있는지를 알 수 있습니다 여기에있는 정보는 하나의 항목입니다 거기에 항목이 있습니다 좋습니다,이 전체는 ListView입니다 ListView 내부 하나씩 렌더링하는 항목이 있습니다

하나의 항목 그래서 우리 부서가 당신에게 소개하려고합니다 물론이 단위의 내용 우리는 정보를 기다린다 왜냐하면 먼저 ListView를 소개해야하기 때문입니다 따라서 데이터의 내용은 사전에 프로그램에 기록 될 수 있습니다 그리고 언제 그것을 어떻게 사용합니까? 여러 가지 방법으로 사용할 수 있습니다

원격 인터넷의 데이터가있을 수 있습니다 그것을 내려라 아마 휴대 전화 측의 SQLite 데이터베이스의 데이터 가능하다 그러한 정보의 근원은 우리가 지금 논의하고 있지 않은 것입니다 레이아웃이 어떻게 처리하는지 이야기 해보자

레이아웃은 데이터의 출처와 상관없이 처리합니다 원칙은 동일합니다 우리가이 물건을 여기서 보았을 때, 나는 너에게 먼저 한 가지를 보러 올 것이다 레이아웃이 위에 있습니다 레이아웃의 상기 구성의 원리 여기서 원칙은 프로젝트를 만드는 것입니다

여기 한 프로젝트 잠깐,이 프로젝트를 별도로 진행할 것입니다 레이아웃으로 설계됨 전체는 소위 변조기 어댑터를 통해 이루어집니다 행동을 통합하는 것을 돕기 위해 그래서 당신이 원리를 이해한다면 이 부분은 아주 간단합니다 원칙을 이해하는 것을 잊지 마세요 좋아, 구현 해보자

나처럼되어주세요 먼저 프로젝트를 열 준비가되었습니다 해보자

Android基礎 / 7-3 ListView – 3

방금 레이아웃 처리가 완료되었습니다 다음으로 우리는 프로그램의 일부로 돌아가서 처리해야합니다

프로그램의 일부는 우리 레이아웃의 최상위를 압니다 하나의 ListView에만 id가 부여됩니다 항목이 그 아래에 매달려 있습니다 잠시 기다려주세요 그래서 나는 처음에 발표하기 위해 왔습니다

비공개 선언은 ListView를가집니다 이러한 ListView는 직접 제공됩니다 listView 세미콜론 이 장소에서 레이아웃을 얻은 후에 listView는 같을 것이다 조회수를 찾는 방법 찾으려는 R 포인트 ID 포인트 목록 이제 사람들이 이미 내 손에 들어 있습니다 그럼 내가 너에게 제안을 해줄거야

우리의 프로그램 코드는 그렇게 지저분하지 않습니다 잠깐,이 listView를 처리 할 수있는 것들이있을 것입니다 관련 설정 그럼 내가 여기 쓰면 지저분해질거야 다른 기능이 있다면 점점 더 혼란 스러울 것입니다 그래서 나는 여기서 하나의 방법을 개발할 수도 있습니다

private void initListView 이름에서 알 수 있듯이 이 listView를 초기화하는 액션 그러나 초기화하기 전에 listView를 가져야한다는 것을 기억하십시오 전화하는 것을 잊지 마세요 나는 전화 할께 그래서 저는 지금 매우 세심합니다 여기에서 listView를 초기화하려면이 함수를 작성하십시오

앞으로도 당신에게 편리합니다 ListView에서 처리 할 프런트 엔드 작업을 알고 있습니까? 내 방법으로는 괜찮을거야 내가해야 할 첫 번째 일은 이것입니다 잠깐, 정보가 전달 될 것입니다 이 정보를 전달하는 방법에 대해 먼저 소스를 살펴 봅니다

그건 그렇고, 나는이 단원에서 너를 가르친다 학습 방법 우리는 see을 본다 우리가 setAdapter 모듈레이터를 전달하고자하는 listView 당신은 그것이 우리의 매개 변수에있는 것임을 알 수 있습니다 ListAdapter를 원한다 하지만 지금 내 손에 달렸어? 나는 그것을 가지지 않았다

그래서 나는 여기에 갇힐 것이다 즉, 나보다 내러티브 문장에 있습니다 그런 어댑터를 원한다 이 변조기는 어떻습니까? 가장 단순한 시리즈는 Simple SimpleAdapter ListAdapter의 구현입니다 이 어댑터는 어떻게 생겼습니까? 새로운 SimpleAdapter 나중에 매개 변수 열이 화면에 표시됩니다

꽤 많이, 하나씩 천천히 와서 잠깐, 우리는 먼저 기억할 것이다 첫 번째 컨텍스트, 모든 컨텍스트를 본다 나는 커서를 움직이지 않고 여기에있다 이 노란 조각을보기 위해 나를 따라 갔다

컨텍스트는 거기에있다 안드로이드에서이게 누구야? 활동, 이러한 서비스는 다음과 같습니다 그리고 우리는 현재 활동입니다 그게 바로 당신이 첫 번째 매개 변수에있는 이유입니다 이 객체 만 채울 필요가 있습니다

이 카테고리의 개체 엔터티 그가 대담하다는 것을 계속해서 보게되는 만화 필요한 정보는 List를 사용하는 것입니다 이 Java 데이터 구조 위장은 무엇입니까? 지도 이 Map의 키는 될 문자열입니다 이것을 기억해 두십시오, 우리가 정보를하기를 기다립니다 이제는 null을 먼저 쓰지 않습니다 나는 이것을 기억해야한다

세 번째 매개 변수 그렇다면 귀하의 레이아웃은 어떻습니까? 위대한, 우리는 방금 그것을 썼다 R 포인트 레이아웃 포인트 항목 이미 작성되었습니다 두 가지 매개 변수가 더 있습니다 이 사람에게 전화 한 사람이 우리는 아직 쉼표 두 명은 아직 실종됐다 그래서 지금 나는이 일들을 생각해 내야한다

내가 처음 보았던 한가지 데이터 구조 나는 LinkedList를 사용한다 이 것을 구현하려면 그리고 그것은 단지 말했다 우리는 위장 안에지도가 있습니다 나는 이것을하기 위해 HashMap을 사용한다 다시 말했어

이 Map의 키는 캐릭터 라인입니다 다음 문자열 내 레이아웃이 TextView이기 때문에 그냥 내용의 문자열 일이 그래서 나는 또한 여기에 발표 할 것이다 값 문자열 이러한 데이터 데이터는 직접 출력합니다 LinkedList 그래서 이미이 객체 엔티티가 있습니다 그래서 이것을 null에 넣을 수 있습니까? 데이터로 변경됨 ~에서 또 다른 것이 있습니다

매우 단순한 개념에서부터 아주 간단한 개념, 한번 보자 그것의 첫 번째는 문자열 배열입니다 나는에서 직접 쓴다 내용을 비워두면 다시 볼 수 있습니다 정수 배열은 과거와 같습니다

나는 그것을 비워두고 잠깐 기다려야한다 이 두 매개 변수를 직접 입력하십시오 에서까지 우리가 그 개념을 볼 때까지 기다린다 하지만 먼저 코드에 오류가 없도록하겠습니다 이제이 모듈레이터를이 모듈에 연결해야합니다

이것은 모두 완료되었습니다 이것은 우리의 구조이지만 당신은 알고 있습니다 데이터 구조에는 배꼽이 없습니다 시작부터 끝까지 그래서 지금 나는이 장소에서 비어있는 구조를 방금 떠났다 잠깐, 다음 프로그램을 보자

아이디어가있는 곳 이 단락은 여기서 내가 준비하도록 도와 줄 것입니다

Android基礎 / 7-4 ListView – 4

그럼 보자 우리는 무엇인가보아야합니다

그럼 데이터를 봅시다 이 정보를 먼저 다루는 것 정보 방금이 콘텐츠가 HashMap 인 것을 보았습니다 그래서 저는 먼저 일련의 정보를 선언 할 것입니다 HashMap 그런 다음 String 문자열 키, 값 이것은 내 d0 데이터입니다 새로운 HashMap과 같습니다

아무것도, 뭔가를 던져 보자 D0 점 넣기 좋아, 이제 개념을 보자 첫 번째는 키입니다 이 키 즉, 데이터 링크의 연관 문자열로 처리됩니다 이 문자열은 喔입니다

이 문자열을 통해 문자열 그것의 내용은 뒤에 그것의 가치가있을 것이다 먼저와 봅시다 Test1 그래서 Test1은 제가 제시하고자하는 것입니다 그러나 열쇠는이 문자열입니다 확인을 위해이 문자열이 기다립니다 정보 출처가 있습니까? 여기에서이 열쇠가 다가옵니다

여기에 소개되었습니다 나는이 문장을 한 번 읽었다 이 Test1을 기다리십시오 문자열 배열에서이 것이 될 것입니다 똑같이 봐라

equals 메서드를 사용하여이 문제를 처리합니다 따라서 정보가 동일하면 똑같은 내용 우리는 제목을 부르는 것처럼 보입니다 나는 제목을 쓸 것입니다 제목이나 원하는 것을 쓸 지 여부는 여기에 쓰는 것은 제목입니다 엄격한 경우 실수를 피하는 방법? 매우 단순하며 전면에 모두 정의 됨 올린 사람 : [0] 제로 요소 좋아, 우리는 한 번 읽고있다

이 Test1 그냥 그것을 체크 아웃합니다 쌍과 쌍 사이의 통신은 어디에 있습니까? 바로 여기에 레이아웃이 있습니다 R 점 ID 포인트 방금 본 item_title 거기 있니? 그래서 이것은 이미 형성되었습니다 매우 표준적인 행동 일대일 데이터 컨텐츠 이 프로젝트의 꼭대기에 오르십시오 좋아, 이건 그룹이야

그러나 당신은 당신이 지금 무엇인지 알 필요가 있습니다 아무도 그것이 단지 독립 변수가 아님을 아무도 모른다 우리는 데이터에 있어야합니다 데이터 포인트 추가로 이동 D0 올라간다 좋습니다

이것은 내 정보 집합입니다 자, 우리의 현재 프로그램을 살펴 보겠습니다 첫 번째 실행 상태는 어떻습니까? 잠깐, 이걸로 실행됩니다 구현 중 하나를 살펴 보겠습니다 따라서 첫 번째 실행은 동일합니다

조금 더 시간을 할애 할거야 지금 건물입니다 빌드가 완료되었습니다 설치가 설치됩니다 직접 성공적으로 설치 좋은 이미 구현 됨 모두 여기 그것을 봅니다

우리는 그림을 다룰 필요가 없으므로 작습니다 먼저 더 많은 정보를 얻으십시오 더 많은 포인트 따라서 복사 방법을 사용하십시오 기타 D0, d1 Test2, Test3 D2 여기서 실수하지 마라 이것은 d1이다

순서대로 d1 추가 D2가 추가됨 LinkedList 때문에 순차적으로 그래서 나는 나중에 1, 2, 3을 볼 것입니다 다시 해보자 보기 아주 좋은 정보가 올라 갔다 정보는이 모델을 통해 최대로 올라갔습니다 하나씩 이동 좋아, 그러면 우리는 모두 하나씩 하나이다

좋아, 그것을 탭할 수 있습니다 ListView의 효과 아직 조치를 취하지 않았다 우리는 먼저 데이터를 충분히 제시해야합니다 동적으로 수정할 수 있습니다 그래서 나는이면을 추가하거나 삭제할 것이다

이제 한 가지만 보자 내가 추가 할 때 그러한 정보를 추가해야합니까? 그래서 여기에서 디자인을 시작했습니다 이 항목을 넣으십시오 메소드에서 지역 변수가됩니다 그래서 잠깐, 나는 문제에 접근 할 수 없다

이들은 작은 것들이다 우리는 발표를하기 위해 그것을 밖으로 가져 갔다 나는 그것을 위로 옮겼다 선언의 행위는 우리의 과정에있다 이 때 그것을 가져 가라

나는이 모든 것을 소위 개인 프라이빗이라고 선언한다 개인적으로하는 것이 좋습니다 정보는 중요하지 않습니다 LinkedList 아래에 추가되기 때문에 변조기 또한 매우 중요합니다 그래서 여기에서 나는 그것을 조정하고 기른다

Ctrl + c 가져 가라 비공개로 붙여 넣기 OK, 세미콜론을 채 웁니다 선언 된 행동 그래서 지금 다시하고 있습니다 사실, 정확히 동일합니다 중요하지 않으므로 잠시만 기다려 봅시다

새로운 액션을 보자 잠깐, 우리는 喔을 추가해야한다 이 데이터 항목 이상으로 등호 추가 구조가 이렇게 동일하게 합쳐질 것입니다 그래서 나는 다시 쓸거야 새 버튼을 누르면 추가 정보 지역 변수는 d2입니다

중요하지 않습니다 지역 변수 그래서 나를 위해, 당신은 볼 것입니다 이 데이터 구조에 익숙하지 않음 좋은 그러나 변조기는 어떻게 알 수 있습니까? ListView는 어떻게 알 수 있습니까? 나는 당신이 방금 그것을 안으로 추가했기 때문에 전혀 모른다 매우 중요한 움직임을 기억하십시오 우리에게이 변조기 어댑터를 제공해주세요

그것을 알리는 알림을 만드십시오 당신은이 방법의 이름이 아주 좋은 것을 보았습니다 喔 데이터 세트가 변경되었습니다 그래서 그것은 그것을 촉발시킨 정보를 바꿀 것입니다 기타, 우리는 걱정할 필요가 없습니다 그런 다음 방금 게시했습니다

반복 발표 그래서 여기서 벗어 버려라 외부 참조 네가 올 때 우리를 만나라 이제이 새로운 버튼이 있습니다 우리가 그것을 설치 한 후에, 와서 그 상태를보기 위해 달려라 보기 자, 처음에는 세 개가 있습니다

추가, 추가, 추가 ADD ~ 끊임없이 증가하고있는 것이 분명합니다 선한 것이 계속 증가하고 있습니다 미끄럼을 사용할 수도 있습니다 나는 그것을 지금 미끄러지고있다 어떤 미끄러짐이 있습니까? 그래서 똑같은 원칙 같은 원리를하는 법 정보를 꺼내십시오

예를 들어 여기에서 판단하겠습니다 데이터 및 데이터의 크기 그럼 나는 항상 그것을자를 수 있습니다 우리의 데이터를 부탁드립니다 제거 정보를 잘라내십시오 내가 모두 0 번째라고 가정 해보자

0 번째는 모두 잘라 버렸어 동일한 정보가 변경되었습니다 어댑터를 조정하십시오 알림을 알리려면 그게 전부 야 이 기능은 다시 쓰기 쉽습니다

추가 및 삭제 실험을 잘 해보 죠 와서 바로 시험해보십시오 나는 새로운 기능의 영향을 받기 싫어 수 이제 DEL을 누르면 0 번째를 자르고 싶습니다 0 번째 컷, 컷 오프 ~ 빛을 자르는 것도 괜찮습니다

다시 누르십시오 if의 판단을 사용했기 때문에 ~을 추가하는 것이 좋습니다 아주 간단하다 확인

Android listview item effecting problem

이 제품 목록에 주문 수량을 입력 할 수있는 대화 상자가 있습니다 특정 항목 나는 주문 만하기 위해 리스너와 항목의 위치 만 사용했습니다

수량 및 체인 보관 된 색상이 같은 항목 하지만 문제는 내가 특정 주문에 대한 주문 수량을 설정하거나 더 많은 제품이 최소한의 여러 항목에 영향을 미칩니다 하지만 사실이 두 항목에 대한 주문 수량을 putted했습니다

#29 What are ListViews in Android | ListView animated explanation | Android ListView tutorial

안녕하세요, BackToCoding에 오신 것을 환영합니다 이 비디오를 더 잘 이해하기 위해 이전의 동영상 또는 전체 재생 목록을 아래 설명에서 확인하십시오

오늘 우리는 "ListViews" 이전 비디오에서 설명한 방법으로 앱을 구성 할 때 탐색 방법이 필요합니다 너의 활동 사이 이 상황에서 사용되는 일반적인 접근법은 다음과 같습니다 목록보기를 사용합니다 목록보기를 사용하면 그런 다음이 데이터를 사용하여 앱을 탐색 할 수 있습니다

예를 들어, 이전 자습서에서는 카테고리 활동을 커피 숍에서 판매하는 음료 목록을 표시합니다 액티비티는 다음과 같습니다 활동은 커피 숍에서 판매하는 모든 음료를 표시하는 목록보기를 사용합니다 특정 음료로 이동하려면 사용자는 음료 중 하나를 클릭하고 세부 정보 그 음료의 표시됩니다 목록보기를 사용하면 데이터를 탐색 할 때 사용할 수있는 수직 데이터 목록을 표시 할 수 있습니다 앱을 통해 우리는 레이아웃에리스트보기를 추가 할 것입니다

옵션 목록을 표시하고 나중에이를 사용하여 다른 옵션으로 이동합니다 활동 <ListView> 요소를 사용하여 레이아웃에 목록보기를 추가합니다 그런 다음 android : entries 속성을 사용하여 목록보기에 항목 배열을 추가합니다 그것을 문자열 배열로 설정합니다 그런 다음 문자열 배열이에 표시됩니다

리스트 뷰를 텍스트 뷰의리스트로서 지정합니다 다음은 레이아웃에 문자열의 배열로부터 값을 가져 오는리스트 뷰를 추가하는 방법입니다 라는 옵션 : 이전 자습서에서 이전에했던 것과 똑같은 방식으로 배열을 정의합니다 stringsxml에 다음과 같이 추가합니다 이렇게하면 음료수, 음식 및 상점의 세 가지 값으로 목록보기가 채워집니다

다음은 레이아웃 코드 전체입니다 우리는 수직 방향으로 선형 레이아웃을 사용하고 있습니다 그러면 Coffee Shop 로고 바로 아래에 목록보기가 표시됩니다 이 동영상의 내용은 다음 동영상에서 계속 다루고 있습니다 이 비디오를 시청 해 주셔서 감사합니다

이 동영상에 대해 마음에 드 십니다 정말 내가 당신에게 유용한 콘텐츠를 만들어 줄 동기를 부여합니다 또한 내 다른 동영상을 확인하는 것을 잊지 마세요 도움이 될 수 있습니다 그리고 마지막으로 구독하십시오

내 채널에

Android S7E7 : Firebase ListView – Save then Scroll to Last Added Item

그래서 ProgrammingWizards의 오늘의 에디션에 오신 것을 환영합니다 TV 녀석 이것은 안드로이드입니다 Firebase ListView 튜토리얼 ListView에 항목을 추가하는 방법 마지막으로 추가 한 항목으로 자동 스크롤합니다

지금까지 나는 가지고있다 Firebase Realtime 데이터베이스에 저장된 항목을 이미 추가했습니다 이미 데이터를로드하는 동안 우리는 자동으로 스크롤하여 마지막 항목 ListView는 여러 텍스트가있는 CardViews가있는 사용자 정의 그래픽으로, firebase의 데이터 사용자가 데이터를 추가 할 수있는 대화 상자에 입력 양식이 표시됩니다

edittexts에 그들을 타이프함으로써 예를 들어 데이터를 입력하고 입력 할 수 있습니다 그런 다음 저장 버튼을 클릭하십시오 데이터가 Firebase와 ListView에 자동으로 저장되었습니다 마지막 항목으로 스크롤됩니다

사실 Firebase Console에 오면 우리는 방금 추가 한 데이터가 노드로 표시됩니다 Firebase에서 데이터는 JSONObjects와 비슷한 방식으로 저장됩니다 Firebase에 원하는만큼 많은 데이터를 저장할 수 있습니다 더 많은 것을 쓰고 싶다고 말하면됩니다 내 인터페이스에 와서 내 데이터

이름, 견적 및 설명에 대한 세 가지 편집 텍스트가 있음을 알 수 있습니다 입력 후 저장 버튼을 클릭합니다 이렇게하면 데이터를 Firebase에 매우 빠르게 저장하고 자동으로 읽거나 검색 할 수 있습니다 ListView에 표시합니다 그런 다음 Google에서 마지막으로 추가 한 항목으로 자동 스크롤합니다

목록보기 입력 대화 상자로 가서 더 많은 데이터를 입력 할 수 있습니다 그런 다음 데이터를 클릭하면 데이터가 Firebase로 보내지고 자동으로 검색되어 목록보기 Firebase 데이터베이스 콘솔에 접속하면 방금 추가 한 데이터가 있습니다 이것은 인물 사진 모드입니다

그런데 우리가 보게 될 것처럼 우리는 우리의 어플리케이션을 위해 커스텀 머티리얼 디자인 테마를 사용했습니다 액션 바를위한 맞춤 색상으로 맞춤 스타일을 만들 것입니다 우리는 또한 풍경 모드로 올 수 있습니다 인터넷으로 설치된 앱을 클릭합니다 즉시 데이터가 Firebase에서 읽히거나 검색되고 ListView에 표시됩니다

그리고 자동으로 ListView는 ListView에서 마지막으로 저장되거나 추가 된 항목으로 스크롤됩니다 원하는 경우 더 많은 데이터를 삽입하기 위해 사용자 정의 입력 대화 상자를 호출하거나 표시 할 수 있습니다 이 경우 편집 텍스트에 입력하고 저장 버튼을 클릭합니다 데이터는 Firebase에 저장되고 자동으로 검색되어 ListView에 표시됩니다 그리고 ListView 스크롤 마지막으로 추가 된 항목까지 Firebase Console에 오면 방금 추가 한 데이터가 있습니다

firebase realtime 데이터베이스에서 데이터를 볼 수 있습니다 그래서 이것은 커뮤니티 회원 중 한 명이 요청한 firebase 튜토리얼입니다 Firebase 튜토리얼을 통해 Listview에서 마지막으로 저장된 항목으로 자동 스크롤합니다 여기에 우리가 가지고 있습니다 우리는 처음부터 Firebase와 작업 할 것이므로 초보자는이 튜토리얼을 완벽하게 따라갈 수 있습니다

그들은 모든 단계를 올바르게 따른다 무엇보다도 먼저 Firebase Console로 가서 Fire Base 응용 프로그램을 만듭니다 https://consolefirebasegoogle

com으로 이동하여 프로젝트 추가를 클릭하십시오 Firebase는 Google 소유이므로 Gmail 계정이 실제로 필요합니다 이미이 튜토리얼에 사용 된 프로젝트를 만들었습니다 그래서 우리는 그걸 탐색 할 것입니다 다음은 프로젝트 개요입니다

우리가 만든 것은 Firebase Project입니다 이제 Firebase App을 프로젝트에 추가해야합니다 따라서 앱을 추가하려면 볼 수있는 것처럼 다른 앱 링크 추가를 클릭하면됩니다 그런 다음 안드로이드로 작업 할 때 안드로이드를 선택하십시오 그런 다음 앱의 세부 정보를 입력해야합니다

먼저 앱 ID를 입력하십시오 이 앱 ID는 buildgradle 파일의 Android 코드에서 볼 수 있습니다 여기에 입력 할 것입니다 그런 다음 등록 할 앱 등록을 클릭합니다

Firebase 신청서 그런 다음 google-servicesjson을 다운로드해야하는 위치에 다음 탭이 표시됩니다 구성 파일 이 파일은 나중에 안드로이드 애플리케이션에 추가하는 방법을 보여줍니다

지금까지 내 앱을 볼 수 있습니다 이것이 내가이 예에서 사용할 것입니다 그런 다음 Firebase Console 사이드 메뉴의 데이터베이스 탭으로 이동하십시오 Firebase 데이터베이스 뷰를로드합니다 그러면 데이터베이스에 이미 데이터가 있음을 분명히 알 수 있습니다

Teacher 객체의 속성을 볼 수 있습니다 그런 다음 규칙 탭을 클릭하십시오 그러면 Firebase 앱의 인증 설정이로드됩니다 규칙 json 객체에서 읽기 및 쓰기 허용을 true로 변경합니다 이를 통해 우리는 우리의 firebase에 공개적으로 데이터를 읽고 쓸 수 있습니다

신청 이제 Android Project 만들기 대화 상자를 통해 Android 애플리케이션을 만들었습니다 애플리케이션 이름을 입력 한 후 최소 SDK로 API 레벨 14를 선택하십시오 그런 다음 템플릿 레이아웃으로 빈 활동을 선택하십시오 그런 다음 다음을 클릭하십시오

그런 다음 마침을 클릭하여 안드로이드 프로젝트를 생성하십시오 우리의 주요 활동은 AppCompatActivity에서 파생됩니다 그런 다음 여기에 프로젝트가 있습니다 우리가 다운로드하는 google-servicesjson 파일을 기억하십니까? 그래, 이제 우리가 필요할거야

와서 우리의 안드로이드 응용 프로그램에 추가하십시오 그런 다음 앱 폴더 또는 디렉토리로 이동합니다 google-servicesjson을이 앱 폴더에 붙여 넣으세요 너는 이미 내가 붙인 것을 볼 수있다

이 파일은 우리의 설정 파일이며 Firebase API에 우리가 작업하고있는 Firebase App을 알려줄 것입니다 또 다른 방법은 파일 탐색기를 통해 직접 프로젝트로 이동하는 것입니다 그런 다음 Google 서비스를 앱 폴더에 붙여 넣으십시오 이제 buildgradle 파일 두 개를 볼 수 있습니다

앱 수준 및 프로젝트 수준 우리는 먼저 프로젝트 수준에 도달했습니다 여기서는 먼저 Google 서비스를 등록해야합니다 buildscript 내부의 의존성 아래에있는 classpath 그런 다음 Google의 Maven을 추가하도록 지정합니다

리포지토리 아래의 리포지토리 URL allProjects 객체 내부의 클로저 이 둘을 반드시 추가하십시오 그런 다음 이제 앱 수준 buildgradle로 이동합니다 API 레벨 14가 최소값임을 알 수 있습니다

SDK 버전 우리는 지원 라이브러리 의존성을 추가하고 appcompat, 디자인 지원 및 cardview 그런 다음 두 개의 firebase 종속성도 추가합니다 먼저 Firebase Core와 Firebase Relatime 데이터베이스를 차례로 선택합니다 컴파일 문은 이미 있으므로 구현 문을 사용합니다

더 이상 사용되지 않습니다 그런 다음 Google 서비스를 사용하여 Google go-service를 적용합니다 적용 진술서 우리는 아래쪽의 종속성 외부에서이 작업을 수행합니다 그 중 하나를 추가했는지 확인하십시오

프로젝트를 동기화하여 인터넷에서 해당 종속성을 다운로드하십시오 글쎄 그게 우리 gradles 대본 우리는 이제 우리의 자원에 왔습니다 우리는 커스텀 머티리얼 테마를 사용할 것입니다 노란색 재질의 작업 표시 줄을 볼 수 있습니다

그럼 우리는 사용자 정의 스타일이나 테마를 만들고 우리의 응용 프로그램에 적용 할 것입니다 이것은 선택 사항입니다 먼저 values ​​폴더와 colorsxml 파일 아래에옵니다 우리는 사용자 정의 테마에 사용할 사용자 정의 색상을 여기에 추가 할 것입니다

몇 가지 맞춤 색상을 도입 한 것을 볼 수 있습니다 그런 다음 stylexml에 와서 맞춤 소재 스타일을 만듭니다 볼 수 있습니다 나는 내 스타일에 이름을 지어 주었고 부모에게는 그냥있다

그 아래에 나는 창 제목을 표시할지 여부, 창 액션 바 등 같은 값 폴더에서 다른 스타일을 만듭니다 마법사를 사용하여 파일을 추가하고 XML을 선택한 다음 '값'을 선택하십시오 그런 다음 style-v21이라는 이름을 지정하십시오

그런 다음 마침을 클릭하십시오 다음 코드를 추가하십시오 이것은 안드로이드 롤리팝을위한 스타일입니다 그런 다음 우리의 android manifestxml 파일로 이동합니다

먼저 인터넷 사용 권한을 추가합니다 그런 다음 맞춤형 소재 테마를 적용 해보십시오 우리의 신청서가 주제가되도록 우리는 테마를 android manifestxml 따라서 AppTheme을 주석 처리하고 적용 할 수 있습니다

우리의 커스텀 테마 다시 말하지만, 이것은 선택적 단계이며 Firebase와 아무 관련이 없습니다 그런 다음 우리의 activity_main, xml에 와서 먼저 TextView를 추가하십시오 그런 다음 Firebase Realtime 데이터베이스의 데이터를 표시하는 ListView를 추가하십시오 맨 아래 오른쪽에는 FloatingActionButton이 있습니다

여기에 코드가 있습니다 루트에는 RelativeLayout이 있습니다 그런 다음 헤더 레이블 인 TextView가 있습니다 그런 다음 Firebase 데이터를 렌더링하는 ListView가 있습니다 우리는 fastscroll alwasy를 보여줄 것입니다

바로 여기에서 볼 수 있습니다 그런 다음 레이아웃 중력이있는 FloatingActionButton을 갖습니다 하단 | 끝 클릭하면 입력 폼이나 대화 상자가 표시됩니다 이제 입력 대화 상자를 보도록하겠습니다

저장 버튼뿐 아니라 편집 문구가 있음을 알 수 있습니다 루트에는 LinearLayout이 있습니다 방향은 수직입니다 대화 상자 상단에 Textview라는 헤더가 있습니다 그런 다음 세 개의 편집 문구가 있습니다

그런 다음 firebase에 데이터를 보내기위한 버튼이 있습니다 여기에서 레이아웃의 디자인보기를 볼 수 있습니다 마지막으로 레이아웃을 위해`modelxml` 레이아웃을 만듭니다 여러 텍스트 뷰가있는 카드보기가 있음을 알 수 있습니다

다음은 XML 레이아웃입니다 루트에는 CardView가 있습니다 카드 고도는 카드 센터 반경과 마찬가지로 5dp입니다 그 안에 우리는 LinearLayout을 생성합니다 우리는 TextView를 POJO 또는 데이터 객체의 이름

그런 다음 다른 텍스트 뷰를 렌더링하여 따옴표뿐만 아니라 설명 우리는 그들을 정렬하고 있습니다 LinearLayout에서 수직으로 이 modelxml 레이아웃은 목록보기를 위해 단일 카드 뷰로 확장됩니다

다음으로 우리는 자바 클래스에옵니다 먼저 Teacherjava 파일을 시작으로 패키지 이름을 지정합니다 그런 다음 교사라는 클래스를 만듭니다 이것은 POJO 또는 데이터 객체입니다

선생님들을 Firebase Database에 저장할 것입니다 먼저 우리는 한 교사에 대한 속성을 지정합니다 이름, 견적 및 설명을 포함하여 세 개의 문자열 속성이 있습니다 그런 다음 빈 생성자를 만듭니다 이 클래스는 필수 요소이며,이 클래스는 Firebase의 JSONObject

데이터를 전달하려는 경우 생성자를 통해 다음 진행하고 그것을 무시, 보조 생성하지만 그대로 유지 그런 다음 우리는 getter와 setter를 생성합니다 행동 양식 이러한 메서드는 데이터 객체 속성을 노출합니다 그런 다음 MainActivity

java 파일을 찾습니다 먼저이 클래스의 패키지 이름을 지정합니다 그런 다음 MainActivity 클래스를 만듭니다 그런 다음 사용할 가져 오기 상태를 추가합니다 이러한 가져 오기에는 Firebase 가져 오기가 포함됩니다

먼저이 클래스가 AppCompatActivity를 확장하도록 만듭니다 이것은 우리의 수업을 하나의 활동, 안드로이드 구성 요소로 바꿔 놓을 것입니다 우리의 안드로이드 manifestxml에서 우리의 실행기 활동으로 만듭니다 우리의 주요 활동은 몇몇 내부 클래스

이렇게하면 복사 및 재사용이 편리합니다 웹 사이트 http://camposhainfo의 코드 먼저 FirebaseHelper라는 클래스를 만듭니다 이 수업은 학생들의 Firebase CRUD는 데이터 작성 및 검색과 같습니다

먼저 DatabaseReference를 포함하여 인스턴스 필드를 지정합니다 우리는 또한 성공을 유지하는 부울을 가지고 있습니다 저장 조작 상태 그런 다음 모든 데이터를 보유하는 arraylist 우리는 데이터베이스에서 가져올 것입니다 또한 데이터를 렌더링하는 ListView도 있습니다

Firebase Realtime 데이터베이스에서 읽습니다 먼저 이러한 객체 중 일부를 전달합니다 생성자를 통해 보시다시피 또한 우리는 retrieve () 메소드를 호출 할 것입니다 실제로 데이터를 검색하고 ListView를 채 웁니다

다음으로 실제 데이터를 Firebase에 실시간 저장하는 save ()라는 메소드를 생성합니다 데이터 베이스 이 메소드는 boolean를 리턴합니다 firebase에 저장하기 위해 데이터 객체를 사용하고 있습니다 먼저 교사가 null인지 확인합니다

그렇지 않으면 계속 진행하여 Firebase에 저장합니다 저장하려면 push () 메서드를 사용하고 우리가 실제로 원하는 값을 설정하는 setValue () 구하다 우리는 child () 메소드에서 자식 이름이나 테이블 이름을 전달합니다 우리는 데이터베이스 예외를 잡아낼 것입니다 저장 한 후에는 저장된 속성을 true로 설정합니다

예외가 생겼을 때 우리는 false를 저장했다 그런 다음 검색하는 방법으로갑니다 firebase의 데이터 먼저 addValueEventListener ()를 호출하여 ValueEvents를 수신합니다 데이터베이스 참조 자식에 대해 우리가 지나가고있는 '선생님'이 테이블 이름입니다

일반적으로 ChildEventListener 또는 ValueEventListener를 사용할 수 있습니다 우리는 데이터를 모두 가져오고 싶기 때문에 후자를 사용합니다 한 번에 마지막으로 추가 된 항목으로 스크롤하기를 원하기 때문입니다 이 메소드에서 처리 할 콜백이 몇 가지 있습니다

ValueEventListener를 사용하면 가져올 수 있습니다 한 번에 우리의 데이터는 ChildEventListener입니다 이 상황은 우리의 응용 프로그램에 적합합니다 왜냐하면 우리는 우리의 LisyView에 마지막으로 추가 된 항목 addvalueEventListener 안에 익명 클래스를 전달합니다

방법 그런 다음 onDataChange () 및 onCancelled () 메소드 OnDataChange () 메서드에서 데이터 스냅 샷이 전달됩니다 하지만 먼저 선생님들에게 데이터의 중복을 피하십시오 그런 다음 데이터 스냅 샷이 실제로 존재하는지 확인하고 그것의 아이들은 제로 이상입니다

이렇게하면 실제로 데이터베이스에 데이터가 있는지 확인할 수 있습니다 그렇다면 우리는 우리의 자녀를 dataSnapshot과 loo [그들을 통해 p 각 반복마다 우리는 하나의 데이터를 얻습니다 우리의 getValue () 메소드를 통해 객체 dataSnapshot 클래스 그런 다음 POJO 클래스를 전달하여 검색 데이터를 일반 오브젝트로 변환합니다 그런 다음 교사 객체를 교사 arraylist에 추가합니다

if 문 밖에서 기본 어댑터 클래스를 인스턴스화합니다 그런 다음 어댑터를 통해 listview에 어댑터를 설정합니다 setAdapter () 메서드 그런 다음 Handler를 인스턴스화하고 post 메소드를 호출합니다 그런 다음 setSmoothScrollToPosition () 메서드를 사용하여 마지막으로 추가 된 항목으로 부드럽게 스크롤하십시오

이 작업을 큐에 넣을 수 있도록 핸들러를 사용합니다 호출 스레드가 준비되었을 때만 수행됩니다 그리고 스레드를 호출하는 것은 UI 스레드라는 것을 기억하십시오 그렇지 않으면 메인으로 알려진 실 그래서 처리기는 기본적으로 우리가 이러한 작업을 수행 할 수있게 해줍니다

열 이렇게하면 부드럽게 스크롤 할 수 없습니다 UI 스레드가 작동 중일 수 있으므로 놓치십시오 그래서 우리는 post 메소드를 사용합니다 다른 작업 후에 해당 작업을 수행 할 수 있습니다

그러나 setSmoothScrollToPosition은 다음을 담당하는 메소드입니다 우리가 제공하는 위치로 스크롤 그런 다음 onCancelled () 메서드 내부에서, 우리는 오류를 기록하고 보여줍니다 토스트 메시지에 그런 다음 맞춤형 어댑터 클래스를 사용합니다

사용자 지정 어댑터라는 클래스를 만듭니다 클래스를 추상 클래스 인 BaseAdapter에서 파생시킵니다 Context와 ArrayList를 인스턴스 필드로 가질 것입니다 우리는 값을 생성자를 통해 전달합니다 그런 다음 BaseAdapter의 추상 메소드를 대체합니다

getCount ()는 표시 할 총 항목 수를 반환합니다 getItem ()은 현재 항목을 반환합니다 getView에서 우리는 우리의 modelxml을 팽창시킬 것이다 레이아웃을 뷰 객체에 추가합니다

그러면 목록 뷰의 행으로 사용됩니다 먼저 convertview가 null인지 확인합니다 그렇지 않으면 우리는 그것을 팽창시킨다 LayoutInflater를 사용하여이를 팽창시킵니다 그런 다음 TextViews를 참조하십시오

그런 다음 하나의 교사 객체를 얻습니다 그런 다음 값을 textviews로 설정하십시오 그런 다음 맞춤 목록보기의 클릭 이벤트를 듣고 건배 메시지를 보여주세요 그런 다음 토스트 메시지에 교사를 클릭하십시오 우리는 convertview를 돌려 보낼 것이다

마지막으로 우리는 주요 활동을 진행합니다 이 인스턴스 필드를 추가하십시오 그런 다음 onCreae () 메서드를 재정의합니다 그런 다음 레이아웃에서 목록보기를 참조하십시오 그런 다음 FirebaseDarabase에 대한 참조를 얻으십시오

그런 다음 FirebaseHelper를 인스턴스화하십시오 그런 다음 클릭 이벤트 또는 플로팅 액션 버튼을 듣습니다 그런 다음 원하는 위치로 부드럽게 스크롤하십시오 정수 만 전달하면됩니다 그런 다음 입력 대화 상자를 표시하십시오

이것은 우리의 데이터를 firebase에 저장하기위한 커스텀 다이얼로그입니다 우리가 팽창시키고있는 레이아웃은 다음과 같습니다 EditText와 저장 버튼이 있습니다 우리는 그들을 참조하고 듣는다 저장 단추의 클릭 이벤트

먼저 기본 유효성 검사를 수행합니다 우리 데이터의 그런 다음 데이터를 firebase에 저장하십시오 데이터를 저장 한 후에는 데이터를 검색합니다 우리에게 묶어 라 어댑터를 통한 listview

그런 다음 원하는 방향으로 부드럽게 스크롤하십시오 그런 다음 마지막으로 대화 상자를 표시합니다 이제 프로젝트를 실행할 수 있습니다 우리가 프로젝트를 운영한다면 여기에 우리의 데이터가 자동로드됩니다

cardviews와 우리의 사용자 정의 listview Firebase 콘솔에있는 데이터를 볼 수 있습니다 대화 상자를 통해 더 많은 데이터를 firebase에 추가 할 수 있습니다 save를 클릭하면 데이터가 firebase에 저장됩니다 데이터가 자동으로 우리의 listview에로드되고 부드럽게 마지막으로 추가 된 항목으로 스크롤됩니다

저희 웹 사이트 camposhainfo에서 소스 코드를 찾으십시오 그렇지 않으면 비디오를 공유하고 그것을 좋아하고 구독하여 우리를 지원하십시오 감사합니다

Android S7E5 : BottomNavigation – Tabs with ListView

ProgrammingWizards TV의 최신판을 어떻게 환영하십니까? 이 클래스에서는 ListView 예제를 사용하여 android Bottom Navigation을 살펴볼 것입니다 우리는 Bottom NavigationView의 모든 탭에 대해 ListView를 렌더링하는 방법을보고 싶습니다

Bottom Navigation Tabs 또는 이미지와 텍스트가있는 항목으로 작업 할 것입니다 모든 탭을 클릭하면 ListView에서 렌더링되는 다른 범주의 데이터가 표시됩니다 또한 각 탭의 색상과 아이콘 및 제목을 변경합니다 우리는 AHBottomNavigation이라는 세 번째 파트 라이브러리를 사용할 것입니다 AHBottomNavigation은 소재 디자인 하단 탐색 기능을 구현할 수있는 라이브러리입니다

ListView 항목에서 ListView 항목을 클릭하면 Toast 메시지에 표시됩니다 이 유형의 앱은 데이터를 분류하는 것과 관련된 여러 유형의 앱을 만들 때 유용합니다 각 범주를 자체 목록에 나열합니다 여기서 가로 모드로 애플리케이션을 볼 수도 있습니다 먼저 프로젝트를 만들고 API 레벨 14의 최소 sdk 버전을 선택합니다

물론 응용 프로그램 이름을 입력하십시오, 우리는 안드로이드 자바 프로젝트를 만들고 있습니다 우리의 템플릿으로 빈 활동을 선택하십시오 그런 다음 마침을 클릭하여 프로젝트를 생성하십시오 먼저 앱 수준 buildgradle을 사용하고 ahbottomnavigation을 종속 항목으로 추가합니다

구현 문을 사용하여 의존성 종결에서이 작업을 수행합니다 다운로드하고 프로젝트에 추가하려면 인터넷이 필요합니다 추가하면 프로젝트를 동기화하라는 메시지가 나타납니다 그런 다음 colors

xml로 이동하여 정의한 색상 16 진수 코드를 추가합니다 이 색상을 사용하여 하단 탐색 탭의 색상을 지정합니다 그런 다음 stringsxml을 탐색하고 하단 탐색 탭 제목을 추가합니다 이 경우 세 개의 탭이 있습니다

그런 다음 activity_mainxml을 검토합니다 여기서는 루트 태그로 상대 레이아웃을 사용합니다 상단에는 TextView가 헤더 라벨로 표시됩니다 그 아래에는 선택된 카테고리 데이터를 렌더링하는 ListView가 있습니다

그 아래에는 레이아웃의 맨 아래에 정렬 된 AHBottomNavigation 태그가 있습니다 이것은 우리가 탭을 추가 할 하부 네비게이션 바를 만드는 뷰입니다 우리가 참조 할 것이기 때문에 ID를 할당해야합니다 그런 다음 MainActivityjava로 이동합니다

먼저 클래스를 호스트 할 패키지 이름을 지정합니다 그런 다음 import 문을 추가합니다 androidappActivity에서 파생 된 Java 클래스를 만듭니다

이것은 우리의 수업을 하나의 활동으로 바꿀 것입니다 AndroidManifestxml로 이동하면 android studio에서 활동을 등록했음을 알 수 있습니다 android manifestxml에 있습니다

우리는 AHBottomNavigation, TextView, ArrayAdapter를 포함하여 인스턴스 필드를 정의합니다 또한 ListView와 정수를 0으로 초기화하여 범주를 나타내는 데 사용합니다 문자열의 ArrayList를 반환하는 getCosmicBodies ()라는 메서드를 만듭니다 그 문자열은 우리의 우주 범주입니다 그래서 먼저 우리는 arraylist를 인스턴스화하고 그것을 지 웁니다

cosmicCategory 정수를 전환하는 switch 문을 만듭니다 Case 0 우리는 머리글 라벨을 Planets로 설정합니다 다음 우리의 arraylist에 행성을 추가하십시오 case 1 헤더 textView를 Stars로 설정합니다 그런 다음 arraylist에 행성을 추가하십시오

그렇지 않으면 은하를 헤더 TextView로 설정하고 우리의 빈 arraylist에 은하계를 추가합니다 마지막으로 우리는 arraylist를 반환합니다 그런 다음 ArrayAdapter를 인스턴스화하고 ListView에 바인딩하는 메서드를 만듭니다 ArrayAdapter를 인스턴스화하여 컨텍스트, 레이아웃 및 반환 할 getCosmicBodies ()를 전달합니다 우리에게 데이터의 arraylist

그런 다음 setAdapter () 메서드를 사용하여 어댑터를 ListView로 설정합니다 그런 다음 createNavigationItems ()라는 메서드를 만듭니다 먼저 AHBottomNavigationItem을 인스턴스화하고 문자열 참조를 전달하여 탭, 드로어 블 이미지 및 색상 드로어 블 폴더에 지정한 이미지가 참조하는 이미지입니다 우리는 우리가 원하는 많은 하부 네비게이션 아이템이나 탭을 위해이 작업을 수행합니다

이 경우 세 개의 탭이 생성됩니다 그런 다음 addItem () 메서드를 사용하여 해당 탭이나 항목을 bottomNavigation에 추가합니다 그런 다음 기본 배경색을 설정합니다 그런 다음 강조 색상과 비활성 색상을 설정하십시오 그런 다음 제목 상태를 설정합니다

이 경우에는 TitleStateALWAYS_SHOW를 사용했습니다 착색 된 바닥을 사용합니다 위치를 전달하여 현재 항목을 설정합니다 그런 다음 아래쪽 탐색 항목이나 탭 선택 이벤트를 듣습니다

탭을 선택하면 cosmicCategory 값을 선택한 탭의 위치로 설정하면됩니다 그런 다음 bindData ()를 호출하여 데이터를 바인드하십시오 그런 다음보기를 초기화하십시오 이러한 뷰에는 xml 레이아웃에서 정의한 bottomNavigation이 포함됩니다 그런 다음 ListView와 TextView를 참조하십시오

그런 다음 ListView에 대한 ItemClick 이벤트를 수신합니다 ListView 항목을 클릭하면 토스트 메시지가 표시됩니다 그런 다음 onCreate () 메서드를 재정의하십시오 먼저 콘텐츠보기를 설정합니다 그런 다음 initializeViews () 메소드를 호출하십시오

그리고 그 프로젝트를 실행했습니다 탭을 클릭하면 해당 ListView의 데이터가로드됩니다 우리가 볼 수 있듯이 우리는 행성, 별, 은하계라는 세 개의 탭을 가지고 있습니다 그게 다야 우리 사이트 http://camposha

info에 소스 코드가 있습니다 동영상을 좋아하고 공유하고 더 많은 정보는 ProgrammingWizards TV에 구독하십시오 고마워, 오 클루 미

Google I/O 2010 – The world of ListView

>> Romain Guy : 모두 안녕하세요 그리고 ListView의 세계에 오신 것을 환영합니다

내 이름은 Romain Guy이고 저는 Google의 안드로이드 엔지니어입니다 저는 UI 툴킷과 몇 가지 다른 것들에 대해 작업하며 오늘 저는 아담 파월입니다 Google의 엔지니어이기도합니다 또한 UI 툴킷에서도 작동합니다 ListView에서 아마 내 잘못이고 지금은 그의 잘못이에요

세션이 끝나면 우리와 이야기하고 우리가 원하는 모든 것을 할 수 있습니다 프레젠테이션 중에 메모를 공유 할 수있는 Google Wave가 있습니다 당신은 또한 수 질문 다른 사람이 8 명에게 묻는 질문에 투표 할 수 있습니다 당신은 또한 수 당신이 어리 석다라고 생각하는 질문을 다운로드하십시오

여기 URL이 있습니다 일단 당신이 그것을 볼 수 있으니 적어 두십시오 당신이 그것을 쓸 시간이 없다면 지금 당장 세션이 끝날 때 슬라이드를 올려 놓을 것입니다 Google I / O 웹 사이트 및 해당 웨이브에 대한 링크 물론 라이브 질문도합니다 여러분 중 얼마나 많은 사람들이 안드로이드 어플리케이션에서 개발자로서 ListView를 사용해 왔습니까? 손 들어

그것은 무서운 것이고 좋은 것입니다 얼마나 많은 사람들이 ListView를 발견했습니다 사용하기가 어렵습니까? 당신은 거짓말하는 사람입니다 지난 며칠간 얼마나 많은 사람들이 적어도 맹세했습니다 그래, 손이 좀있어

좋았어, 좋다 그것은 당신이 그것으로 복잡한 것들을하고 있다는 것을 의미합니다 ListView를 사용한 적이없는 분들은 Android에서 꽤 흔한 위젯입니다 그 우리가 출하하는 거의 모든 애플리케이션에서 생각합니다 그리고 여기에서 예를 볼 수 있습니다

왼쪽에있는 슬라이드는 API 데모 중 하나입니다 따라서 위젯을 세로로 쌓습니다 대부분의 경우 ListView는 단순한 텍스트를 보여주고, 때로는 아이콘과 텍스트를 가지고 있지만, 매우 복잡한 ListView를 수행하십시오 안드로이드 10을 출시하기 전에 우리는 버전이있었습니다

Gmail을 사용하여 이메일을 열었을 때 웹보기로 구성된 ListView를 사용하여 대화를 표시하십시오 그것이 효과가 있기 때문에 우리는 그 일을 멈췄습니다 그것은 사용하는 것이 좋지 않습니다 하지만 정말로 뭔가를하고 싶다면 미친, 할 수있어 물론 매우 복잡한 작업을 수행 할 수도 있습니다

ListView를 사용한 것들 오른쪽에 내가 작성한 앱의 예가 표시되어 있습니다 ListView를 사용자 정의합니다 이것은 매우 유사한 그리드 뷰이며 사용자 정의 할 수 있습니다 배경, 선택 항목을 사용자 정의 할 수 있으며 각각 내부에 매우 복잡한 항목이있을 수 있습니다

열 그리고 사이드 노트를 위해서, 우리는 오늘은 ListView에 적용되지만 그리드보기에도 적용됩니다 몇 가지 ListView에 특정한 것이지만 모든 것이 그리드에 적용됩니다 보기 그리드보기가 필요하다면 이 강연에서 슬라이드를 참조하면 모든 것이 동일해질 것입니다

이 세션의 의제는 다음과 같습니다 우리는 어댑터와 가상화에 대해 이야기 할 것입니다 우리는 항목 속성, 머리말과 꼬리말, 선택자에 대해 이야기 할 것입니다 몇 가지 다른 기능을 통해 이야기를 마무리하고 앞으로 절대로해서는 안되는 내용 ListView를 사용하십시오 마지막 슬라이드에서 청중들에게 물어볼 것입니다

너는 결코해서는 안되는 일을하고 나는 너에게 정말로 화가 나게 될 것이다 Adam은 어댑터로 시작할 것입니다 >> 아담 파월 : 알겠습니다 그래서 여기에있는 문제는 큰 데이터 세트를 다루는 것입니다 구체적으로 제시 큰 데이터 세트

사용할 수있는 항목이 10,000 개있는 경우, 어떻게 사용자가 화면을 열어 화면을 볼 수 있는지, 그래서 비교적 빨리 그들을 통해? 이를 다루기위한 두 가지 큰 도전 메모리와 성능입니다 뷰 계층 구조에 10,000 개의 뷰를 첨부하고 싶지는 않습니다 뷰는 그 의미에서 꽤 무거운 오브젝트입니다 그리고 너는 뛰어 다니기를 원한다 빨리

사람들은 터치 스크린 장치에서 빠르게 사물을 탐색 할 수 있기를 기대합니다 특히 그래서 우리가 ListView에서 구현 한 솔루션 요구에 따라 조회수를 채우는 것입니다 그래서 우리는 실제로 새로운 관점을 제시합니다 필요합니다

실제로 표시되지 않을 뷰 계층 구조에 아무 것도 추가되지 않습니다 화면에 둘째, 우리는 그러한 견해를 재활용합니다 따라서 우리는 이미 작성한 견해를 재사용하고 새로운 콘텐츠를 작성합니다 를 통해 올

이를 통해 많은 실적을 달성 할 수 있습니다 매우 빠르게 사이클링 할 때 떠오르는 문제 매우 긴 목록을 통해 그래서 약간의 전문 용어가 시작됩니다 와 작업 할 때 데이터를 참조하는 다양한 방법이 많이 있기 때문에 ListView를 사용하여

우리가 색인에 관해 말할 때, 우리는 이야기하고있다 계층 구조의 뷰 그룹에있는 하위 뷰에 대해 설명합니다 따라서 자녀를 데려다 주라고 부탁하고 거기에있는보기를 가져 오는 경우, 그 때입니다 우리는 지표에 대해 이야기하고 있습니다 우리가 직책에 대해 이야기 할 때, 우리는 어댑터 내의 요소 위치에 대해 이야기합니다

마지막으로 ID에 관해 이야기 할 때 어댑터 내의 각 항목은 고유 식별자를 가질 수 있습니다 거기에 저장된 데이터의 값을 나타냅니다 그래서 일이 시작되면, 어댑터를 지원하는 데이터에 대해 삽입 또는 삭제를 수행 한 다음 StableID가있을 때 몇 가지 추가 트릭을 수행 할 수 있습니다 ListView에 어댑터의 참 (true) 값을 참 (true)으로 반환하여 StableID가 있다고 알려주면 StableIDs 기능을 사용하면 프레젠테이션을하는 몇 가지 추가 트릭을 수행 할 수 있습니다 많은 요소가 추가되거나 제거 될 때 좀 더 좋네요 시도하고 유지할 수 있습니다

데이터는 화면에서 비교적 안정적입니다 >> Romain Guy : 색인이 무엇인지 이해합니다 위치와 ID는 매우 중요합니다 왜냐하면 저는 인정해야합니다 ListView는 정중하게 유지하기 위해 다소 부족하며, 이는 전적으로 우리 잘못입니다

우리는 매우 유감 스럽습니다 그러나 우리는 매개 변수의 명명과 관련하여 매우 신중했습니다 따라서 위치와 관련된 메소드를 보거나 메소드의 매개 변수를 볼 때마다 인덱스라고 불리는데, 현재 그 의미가 될 것입니다 모두 그 점에서 꽤 좋다 >> 아담 파웰 : 확실히

그래서 어댑터의 고기는 뷰 방식으로 될 것입니다 이것은 당신의 데이터 소스의 데이터, 무엇이든지간에, 가져 오는 데이터인지 여부 네트워크에서 로컬 데이터베이스의 데이터를 가져옵니다 그것이 무엇인지는 중요하지 않습니다 보기를 통해 데이터를 완벽하게 프레젠테이션 제어 할 수 있습니다 당신은 임의의 것을 반환 할 수 있습니다

보기, 그리고 그 ListView 내에서 귀하의 요소가됩니다 따라서 우리는 전체 프로세스를 최적화 할 수있는 많은 기회를 제공합니다 그리고 종류 우리가 이러한 최적화를하기 위해 가정을하기 때문에, 발에 몸을 쏠 기회가 많습니다 그리고 여러분 중 일부는 이전에 이들 중 하나 이상을 발견했다고 확신합니다 있잖아, 왜? 이 특정 목록 항목에서 하위 항목 인이 요소를 클릭 할 수 있습니까? 우리는 그 중 일부에 들어갈 것입니다

우리는 왜 그럴 것입니다 구체적으로, 우리는 당신이 갑자기보기 안에 할 일들의 상당히 좁은 부분 집합 그래서 ListView 똑똑한하려고합니다 보시다시피, 여기에서 현명하기는 매우 쉽습니다 거기,하지만보기를 통해 우리는 변환보기라는 추가보기 매개 변수를 전달합니다

우리는 ListView가 이러한 뷰의 일부를 재사용하는 방법에 대해 이야기했습니다 데이터를 신속하게 보기를 변환하면 어떻게되는지 알 수 있습니다 ListView는 화면에서 벗어난 모든 추가보기를 추적합니다 기존 데이터로 채우기 위해 다시 한 번 제공하십시오 전환 뷰 매개 변수입니다

우리는이 슬라이드에서 여기를 보았습니다 그러면 항목 유형이 자동으로 일치합니다 너에게도 어댑터에 여러 유형의 서로 다른 데이터가있는 경우 변환보기는 ListView에 각각의 유형을 알려주는 한 항상 올바른 유형입니다 어댑터의 위치는 다음과 같습니다

그리고 우리는 조금 더 그것에 도달 할 것입니다 따라서 뷰 뷰 매개 변수로 변환 뷰 매개 변수가 null이 아닌 경우 변환하십시오 재사용하십시오 그 응용 프로그램의 성능을 상당히 향상시키는 데 도움이 될 것입니다 >> Romain Guy : 그래서 get view 메소드를 구현하는 다른 방법이 있습니다

우리는 간다 그 다른 방법들 중 세 가지를 봅니다 느린 길, 올바른 길과 빠름이 있습니다 방법 먼저 슬라이드를보세요 빨리 손을 들어주세요

부끄러워하지 마세요 이런 뷰 메소드를 얻는다 여러분 중 일부는 해냈습니다 좋아, 적어도 정직한 사람이있어 방에

>> Adam Powell : 여기 몇 개가 있습니다 너무 >> Romain Guy : 네이티브 방식입니다 get view를 구현합니다 뷰가 호출 될 때마다 새 뷰를 생성합니다

여기 2 번 줄에서 XML을 볼 수 있습니다 이것은 매우 비싼 준비 우리는 XML을 파싱해야만한다 안드로이드에서, 그것은 여전히 ​​꽤 시간이 걸립니다 뷰를 초기화해야합니다

메모리를 할당하고, 뷰가 하위 뷰로 구성 될 때 비용이 많이 올 수 있습니다 예를 들어,이 예제에서 팽창 된 뷰는 이미지 뷰를 포함합니다 및 텍스트보기 3 번째 줄에서 우리는 단지 그 두 가지 견해에 어떤 ​​데이터를 묶는 것입니다 그래서 우리는 텍스트 뷰에 텍스트를 넣었습니다

그러면 이미지 뷰에서 생성 된 뷰가 반환됩니다 그 큰 문제는 사용자가 목록에서 벗어나 스크롤하려고 할 때입니다 수천 개의 아이템을 통해 수천 개의 뷰를 생성 할 것입니다 많은 기억을 취할 것입니다 아이디어를 제공하기 위해 Android 비용에 대한 정보를 제공합니다

약 1 ~ 2 킬로바이트의 RAM 그래서 당신이 천개의 견해를 가지고 있다면 그것은 이미 메그입니다 당신이 낭비하고있는 RAM의 양은 가비지 컬렉터가 걷어차는 것을 의미합니다 UI 스레드를 중단시킬 것입니다 애니메이션을 더듬 거리게 만들고 사용자가 애플리케이션에 실제로 열 받게됩니다

수 천명의 명단을 믿지 마라 예를 들어, 수천명의 접촉자가있는 많은 사람들을 알고 있기 때문에 자신의 응용 프로그램에서 – 자신의 주소록에서, 그리고 아주 쉽게 할 때 귀하의 전자 메일 전자 메일에 회신 할 때마다 연락처가 자동으로 만들어 지도록 응용 프로그램이 설정됩니다 따라서 컨벤션을 수정하려면 변환보기를 사용해야합니다 그래서 단순히 또는, 변환 뷰가 null가 아닌 그것이 null이면, 새로운 뷰를 생성해야한다 너는 할 수있다

XML에서 팽창한다 프로그래밍 방식으로보기를 만들 수 있습니다 니가 원하는대로하면 돼 새로운보기를 만들어야합니다 다른 경우에는 변환보기가 이미 사용 가능합니다

다시 사용하십시오 우리가 말했듯이, 우리는 뷰는 원하는 뷰 유형이므로 텍스트 뷰를 가질 것이라는 것을 알 수 있습니다 당신은 당신이 당신의 심상 전망을 가지고있을 것이라는 점을 알고 이것은 매우 빨리이기 위하여려고하고있다 기본적으로이 방법을 사용하면 필요한 뷰 수만 할당 할 수 있습니다 화면을 채 웁니다

때로는 하나 또는 두 개 더 할당 할 것이지만 대부분은 예를 들어 넥서스 원 (Nexus One)에서 일곱 번이나 여덟 번 밖에 볼 수 없을 때가 있습니다 그래서 그것은 거의 없습니다 구현할 수있는 또 다른 기술이 있습니다 빨리 가라 Android에서 개발 한 뷰 홀더라고하는 패턴입니다

성능 문제, 특히 주소 문제로 인해 10 이전의 팀 연락처 수천 개의 전체 도서 그래서 아이디어는 당신이 정적 인 데이터를 보관할 작은 데이터 구조 리스트의 각 주어진 행 따라서이 예에서는 목록의 각 항목에 대해 우리는 5 번과 6 번 줄에서 텍스트보기와 이미지보기를 찾기 위해 ID로 당신을 찾으려고합니다 그렇다면 스크롤을 통해 수천 번이나 수천 번 해봐야하는 이유는 무엇입니까? 큰 목록

그래서 대신에 우리는이 작은 것들에서 한 번 그리고 영원히 그 물건들을 잡을 것입니다 뷰 홀더라고 불리는 클래스 원하는 곳 어디에서나 만들 수 있습니다 그 수업을 만들려고 노력해라 정적이므로 둘러싼 인스턴스를 연결하지 않습니다

그리고 이것은 코드가 다음과 같은 경우입니다 뷰 홀더를 사용합니다 따라서 유일한 차이점은 변환 뷰가 null의 새로운 뷰, 뷰 홀더의 인스턴스를 작성해, 당신은보기의 아이들을 찾는 일을합니다 여기에서 텍스트보기와 이미지 뷰는 5 ~ 9 행입니다 그런 다음 홀더를 태그로 설정할 수 있습니다

보기 따라서 태그는 임의의 객체입니다 그것은 할 수있다 너가보기에 둘 수있는 너는 원하는 무엇이든 여기에 태그 기능을 사용하여 추가 데이터를 저장합니다

이보기에서 전달 된 전환보기가 있으면 태그를 가져옵니다 뷰 홀더로 가져온 다음 원하는 경우 16 번과 17 번 라인에서 액세스 할 수 있습니다 텍스트보기 및 이미지보기 따라서 찾기 뷰를 수행하는 데 드는 비용을 절약 할 수 있습니다 이것은 매우 간단한 예이지만 일부 응용 프로그램에서는 더 많은 데이터를 저장할 수 있습니다 거기에

char 배열을 저장하여 데이터베이스 쿼리를 수행하여 새 배열을 할당 할 수 있습니다 문자를 매번 쿼리하면됩니다 그리고 이것은 환경 설정의 비교입니다 세 가지 방법 중 그렇다면 Froyo 빌드를 사용하여 Android 버전을 너희들은 아직 가지지 않았다 우리가 Nexus One에 있기 때문에 이것은 빠른 CPU로 실행됩니다

10,000 개의 항목 목록을 만들었습니다 각 항목은 이미지가 포함 된 선형 레이어입니다 및 텍스트보기 뷰를 얻지 못하는 구현에서는 초당 약 20 프레임을 얻습니다 변환보기를 다시 사용하여 뷰 가져 오기를 올바르게 구현하면 최대 50 개 프레임 둘째

마지막으로 뷰 홀더를 사용할 때 초당 최대 55 프레임을 이동합니다 Nexus One에 대한 아이디어를 얻으려면 초당 최대 프레임 수를 get은 60입니다 따라서 뷰 계층을 다시 그리는 오버 헤드를 고려할 때, 모든 명령을 내고,보기를 바인딩하고, 비트 맵을 읽으며, 그런 식으로 이 꽤 빨리 당신이 어댑터에 갈 수있는만큼입니다 따라서 애플리케이션 내부의 숫자에 접근 할 수 있다면 갈 수 있습니다

당신이 왼쪽에 있다면, 계속 일하십시오 >> 아담 파월 : 알겠습니다 그래서 제가 전에 언급했듯이, 발을 발로 쏘는 데는 여러 가지 방법이 있습니다 이 과정 그것의 대부분은보기를 얻는 방법을 능가하려고 노력하는 것과 관련이 있습니다

당신을 위해 물건을 최적화하십시오 따라서 어떤 종류의 로컬 뷰 캐시도 생성하지 마십시오 노력하고 똑똑하고 말하지 마라, 좋아, 글쎄, 나는 그 위치가 항상 이 요소가 될 수 있으므로이보기를 어댑터에 저장하고 항상 반환 할 것입니다 이 때마다 나는 포지션 1을 요구 받는다 그 문제는 구현으로 인한 것입니다

ListView 내 리사이클 러의 새로운 뷰를 다시 전달하지 않으면 전달 된 뷰 인스턴스를 생성했거나 정확히 변환 한 것으로 가정합니다 이제까지 ListView에 붙어 있던 모든 것이 죽었다 그리고 그것은 단지 가고있다 계속해서 버려야합니다 때로는 이것이 다시 연결될 수 있습니다

정말 이상한 방법으로, 처음에는 문제가있는 것처럼 보이지 않습니다 당신은 아주 이상한 행동을 관찰하기 시작합니다 따라서 캐시를 로컬에서 캐시하지 마십시오 그런 식으로 어댑터에서보기에 액세스하지 마십시오 변환보기의 구조도 변경하지 마십시오

보기가 들어 왔기 때문에 반드시 추가 콘텐츠를 추가하고 제거해야한다는 의미는 아닙니다 그 견해 그것이 유형 시스템이있는 것입니다 우리는 실제로 당신이 필요로하는 뷰의 타입을 돌려주는 뷰를 변환 할 수 있습니다 이미 다른 모든 하위보기가 초기화되어 있습니다

너 때문에 어댑터 내의 다른 유형의 데이터가 반드시 필요한 것을 의미하지는 않습니다 그것이 올 때 변환보기에 모든 종류의 조작을 수행하려고합니다 마지막으로보기 호출에 대한 가정을하지 마십시오 우리는 개발자들이 좋아요 좋아요,보기가 방금 5 번 위치에 전화가 걸려서 뭔가를 저장하려고합니다

이 특정보기 인스턴스에 대한 위치는 5이고, 나는 그 장소를 캐시 할 것입니다 나는 그렇게 할 것입니다 바로 그 이유는 데이터의 뒤쪽에있는 데이터가 그것은 업데이 트합니다 이 문제는 뷰 호출을 보장하지 않습니다 그래서 우리는 결국 장면을 볼 수있는 호출을 끝낼 수 있습니다

ListView가 얼마나 큰지를 측정하기 위해 우리는 ListView를 사용하여 우리가 당신에게 전달하는보기를 변환하십시오 성능상의 이유로 다시 그래서 당신이 얻는 견해 – 당신이 직책을 위해 당신에게 전달한 마지막 견해 나중에 실제로 화면에서 끝나는 것은 아닙니다 >> Romain Guy : 실제로, 주문에 대한 가정을 세우는 좋은 예입니다 getView 호출은 정말로 최근에 Android 팀 내부에서 발생한 일입니다

GMail 응용 프로그램은 이러한 가정 중 하나를 만들고있었습니다 그래서 Froyo에서 UI를 변경하여 다른 사용자에게 전달했습니다 ListView에서 코드 경로 갑자기 getView 호출의 순서 변경되었습니다 그리고 귀하의 이메일에있는 모든 단일 메일 받은 편지함은받은 편지함의 첫 번째 전자 메일처럼 보입니다

그리고 그것은 버그 ListView가 아니 었습니다 응용 프로그램의 문제였습니다 그들이 당신을 0으로 만들 것이라고 가정하면, 하나, 두 가지, 세 가지를 얻으십시오 더 이상은 그렇지 않았다 당신에게 어떤 생각을주기 위해서, 적어도 우리는 생각합니다

ListView에서 레이아웃을 수행하는 데 4 ~ 5 가지 방법이 있으므로 때로는 시작하려고합니다 화면 하단에서 레이아웃을 수행하여 때때로 우리는 처음부터 시작합니다 때때로 우리는 중간부터 시작합니다 그래서, 다시, 어떤 가정을하지 마십시오 호출 순서

>> 아담 파월 : 알겠습니다 데이터가 변경되면 어떻게됩니까? 데이터가 변경 될 때마다 업데이트해야합니다 귀하의 어댑터를 어떤 식 으로든 그리고 그뿐만 아니라 ListView에 알려줄 필요가 있습니다 어댑터가 갱신 되었음

변경된 알림 데이터 세트를 호출하여이를 수행합니다 이것은 기본적으로 ListView를 트리거하여 화면상의보기를 위해 어댑터를 다시 스캔합니다 그것들을 다시 채우고 목록이 스크롤되어 있으면 목록을 조작하는 것과 관련된 모든 종류의 조작을 처리하십시오 더 적은 데이터 요소가 있거나 거기에 더 많은 것이 있다면 그것을 성장 시켜라 데이터 세트를 사용할 수 없게 된 경우 (예 : 백업 파일과 같은 경우) 삭제됨, 네트워크 액세스가 끊어지면 유효하지 않은 데이터 세트를 알리는 메시지가 표시됩니다

더 이상 데이터가 없습니다 완전히 사라 졌으므로 이제 더 이상 데이터에 액세스하려고하지 않습니다 >> Romain Guy : 우리는 나중에 더 이야기 할 것입니다 그러나 알림 데이터 세트 변경을 호출하는 것은 매우 중요합니다 ListView에 대해 제기 된 대부분의 버그는 일반적으로 호출하지 않는 응용 프로그램에서 발생합니다

데이터 세트가 올바르게 변경되었음을 통지하십시오 UI 스레드에서 호출되어야하며 특히 어댑터 수를 변경하면 어댑터를 수정할 때마다 호출해야합니다 어댑터 내부 그리고 실제로, 나는 어떤 방출을 위해 기억하지 않는다, 아마 도넛 형이나 Eclair 형 이었기 때문에 ListView에서 새로운 예외를 추가 했으므로 ListView 알리지 않고 어댑터를 변경할 때 대 / 소문자를 감지하려고합니다 그런 일이 생기면 이제 우리는 추락합니다

우리는 예외를 던지며, 당신이 뭔가를하고 있다는 것을 말하는 로그 고양이의 매우 길고 자세한 메시지 스레드와 함께 아마 잘못 그래서 그 메시지를 보았다면주의를 기울이십시오 그것에 이 문제를 해결하는 것이 매우 중요합니다 >> Adam Powell : ListView가 다른 뷰 유형을 처리하기 전에 언급했습니다

많은 경우에 한 번에 표시 할 데이터 유형이 두 가지 이상 있습니다 특정 목록 요소에 이미지를 포함시킬 수 있습니다 어떤 것은 인용 된 텍스트를 확장했을 수도 있습니다 이 모든 것들은 결국 달라진다 동일한 목록 내에서 표시하려는 데이터 유형 그리고 ListView가 도움이 될 것입니다

함수는 어댑터에서 항목보기 유형 가져 오기 ListView에, 그 위치에있는 뷰의 종류를 통지합니다 일반적으로, 이것은 – 여러분이 되돌려주는 정수 매개 변수 일뿐입니다 그래서 많은 타입을 가지고 있지만, getView 타입 카운트에서 리턴한다 그리고 ListView는 기본적으로이 뷰 유형별로 리사이클러를 유지합니다 너는 가지고있다

그리고 항상 당신을 돌려 보낼 준비가되어있을 것입니다 getView가 호출 될 때 올바른 것 >> Romain Guy : 그 밖의 무엇인가 매우 중요합니다 항목 유형, 보유한 유형의 수, getView를 구현할 때 유형 카운트 방법은 어댑터의 수명주기 동안 일정해야합니다 전화 번호를 변경할 수 없습니다

10 가지 유형이 있다고 말하면 괜찮습니다 실제로 두 가지만 사용하게됩니다 그것은되지 않을 것입니다 자원을 낭비하십시오 하지만 그 숫자를 바꾸면 아주, 아주 나쁜 일들이 ListView에서 일어나고, 당신은 정말 이상한 행동을 보게 될 것입니다

때때로 (들리지 않음) 매우 가깝다 그래서 최대 숫자가 무엇인지 알아 내려고 노력하십시오 필요한 유형의 수를 가져 와서 getView 유형 계산 메소드에서 해당 수를 리턴하십시오 >> Adam Powell : 데이터 소스가 정말 느리면 어떻게 될까요? 네트워크를 통해 무언가를 가져오고, 큰 파일을 읽거나, 다른 방법으로 읽거나, 당신은 당신의 UI 스레드에서 그것을 따라갈 수 없을 것이고 여전히 반응 적이다 그래서 그 데이터를 가져 오는 것은 실제로 어디서나 일어날 수 있습니다

다른 스레드를 분리하여 네트워크에 요청을 보낼 수 있습니다 그건 중요하지 않아 그러나 기억해야 할 중요한 점은 UI 스레드에서 항상 어댑터 변경 사항을 커밋합니다 그리고 다시 한 번, 알림 데이터 세트가 변경되었는지 확인하십시오 따라서 모든 변경 사항은 해당 UI 스레드에 반영되어야합니다

>> Romain Guy : 그리고 같은 UI 이벤트에서 알림 데이터 세트 변경을 호출해야합니다 어댑터에 변경 사항을 커밋합니다 어댑터를 변경 한 다음 언젠가는 변경할 수 없습니다 나중에 보내고 ListView에 데이터 집합 변경을 알리십시오 왜냐하면 그 사이에 레이아웃을 요청하면 ListView에 충돌하는 데이터가 있습니다

그런 다음 두 가지 항목 속성에 대해 이야기하겠습니다 첫 번째 것은 사실 아주 간단합니다 목록 항목을 비활성화하는 기능입니다 어댑터 인터페이스를 보면 자신의 어댑터를 만들 때 메서드가 있습니다 ListView에 항목의 사용 가능 여부를 지시 할 수 있습니다

기본적으로 모든 항목이 사용됩니다 활성화 된 항목을 사용하면 트랙 볼이 있기 때문에 기본 테마로 오렌지색 강조 표시를 얻을 수 있습니다 그 아이템 또한 항목을 클릭 할 수 있습니다 그리고 비 목록 항목 클릭 이벤트를 얻을 수 있습니다

하지만 경우에 따라 이 항목들 항목을 사용 중지해도 반드시 표시되는 것은 아닙니다 이 항목을 사용할 수 없다는 사용자 예를 들어, 웹 서버 일 수 있습니다 도달 할 수 없다 그것은 또한 – 단순히 다른 것을 창조하는 것입니다

items – 다른 시각적 모양을 가진 항목 여기 예제가 있습니다 이것은 시장 응용 프로그램입니다 ListView 중간에있는 녹색 헤더를 보면 비활성화 된 항목입니다 그래서 그들은 헤더 역할을하기 때문에 장애인으로 만듭니다

그래서 그들은 단지 목록의 다른 부분을 나타냅니다 분명히, 그것은 트랙볼로 그들을 선택하거나 클릭하는 것이 가능하지 않을 것입니다 그 (것)들에 따라서 사용 된 매우 간단한 기능입니다 안드로이드 플랫폼 내부에 심하게 있으며 사용자 탐색을 사용자의 내부 탐색기에 통합 할 수 있습니다

>> Adam Powell : 가끔씩 특정 목록 항목에 대한 클릭 이벤트가 발생하지 않습니다 충분히 사용자가 선택을 할 수있게하려는 경우 그 목록 안에 당신은 그 선택을 상호 배타적으로 원할 수 있습니다 한 번에 하나의 항목 만 선택할 수 있습니다 사용자가 선택할 수 있도록 할 수도 있습니다

특정 목록에서 여러 항목 그래서 우리는 선택 모드를 제공합니다 단일 선택 모드가 있습니다이 모드는 상호 배타적 인 라디오 버튼을 다시 한번 제공합니다 선택 항목이 있으며 여러 항목을 확인할 수있는 다중 선택 모드가 있습니다

그 목록 그래서 당신이 그것을 얻고 싶다면 어떻게 될까요? 체크 된 상태를 취소하고 응용 프로그램의 다른 부분에서 읽으십시오 ListView에서 여러 메서드를 호출 할 수 있습니다 체크 된 항목 위치를 얻으면 결과가 반환됩니다 단일 선택 모드에서 선택한 항목의 위치입니다

객관식 모드 인 경우 체크 항목 위치, 복수 및 그러면 현재 확인 된 모든 직위를 얻을 수 있습니다 그러나 앞서 어댑터에 stableID의 개념이 있다는 것을 언급했습니다 어댑터 내의 각 값은 해당 값을 고유하게 지정하는 정수를 갖습니다 다른 삭제 또는 삽입으로 인해 위치가 어떻게 바뀔 수 있는지 따라서 시간이 지남에 따라 어댑터에서 많은 삭제 및 삽입을 수행하려는 경우 그리고 당신도 선택을하고 있다면, 체크 된 아이템 ID를 사용하여 그것들을 참조 할 수 있습니다 항목을 ID별로 정렬하여 위치가 실제 데이터와 일치하지 않게하십시오

어서 우리는 거기에 갈 다음은 각 선택 모드의 예입니다 이전에 벨소리 선택기에서 이걸 보았을 것입니다 그리고 레이블에 대한 선택자에서 당신은 GMail에서 분출하고 싶습니다

이것이 기본적으로 보이는 방식입니다 하지만 늘 그렇듯이 프레젠테이션을 제어 할 수 있습니다 getView를 통해 그래서 당신은이 표정을 당신만큼 멋지게 만들 수 있습니다 처럼

>> Romain Guy : 자, 아주 (들리지 않음) 집중 가능한 항목을 처리하는 방법입니다 우리가 가지고있는 커다란 제약 중 하나는 UI는 트랙볼과 터치 스크린을 지원해야한다는 것입니다 우리는 스크린에 손을 대 자마자 초점이나 선택이 이루어지기를 조기에 결정했습니다 떨어져 그래서 우리는 선택 모드를 가지고 있습니다

사용자가 목록의 항목을 탭하고 화면에 선택 항목을 유지하게 할 수는 없습니다 ListView 정말 그렇게 열심히 싸울 것입니다 그래서 우리가 한 일은 기본적으로 초점을 맞추는 항목을 – 두 개의 버튼이 있지만 전체 행이 선택되는 행이있는 경우 트랙 볼을 사용할 때 그 이유는 매우 어색 할 것입니다 전체 항목을 선택하는 것부터 선택하는 것까지 갈 것입니다

행 자체 안의 작은 항목 그래서 당신이 그것을 더 잘 제어하고 싶다면, if 선택 가능한 포커스가있는 항목을 행 안에 넣고 싶다면 ListView에 당신은 그것을 원한다 따라서 세트 아이템을 호출하면 집중할 수 있고, 사실, 당신은 ListView, 지금, 내 행에, 난 전체 행 싶지 않아요, 내가 말하는거야, 사실 싶어요 행 내부의 항목을 선택합니다 왼쪽에는 콘텐츠 애플리케이션이 있습니다

왼쪽에는 빠른 접촉 동작 인 집중 가능한 항목이 있음을 알 수 있습니다 그러나 기본적으로 사용자는 사용자가 원하는 항목을 선택하지 못하도록 결정했습니다 트랙볼 따라서 트랙볼을 사용할 때만 볼 수 있습니다 전체 행, 전체 연락처를 선택하십시오

반면에, 트위터 응용 프로그램에서, 그들은 그 기능을 사용하여 각 트윗의 링크를 선택할 수 있습니다 따라서 전체 짹짹을 선택할 수는 없지만 트랙으로 이동할 수는 있습니다 링크를 링크로 연결합니다 그래서 우리는 그것이 약간 어색하고 여러 개의 복잡한 목록 항목을 갖고 싶을 때가 종종 있습니다 접촉 할 수있는 영역

좋은 자습서와 설명이 있습니다 웹상의 다양한 메일 링 목록 등에 이것은 우리가 미래에 향상시키고 자하는 것입니다 그래서 우리가 어떻게해야하는지에 대한 아이디어가 있다면 다양한 Android에서 언제든지 저희에게 연락하십시오 우리는 그것에 대해 이야기 할 수 있습니다

내 현재 아이디어는 어쩌면 ListView 2는 터치 모드 만 지원하며 다른 플랫폼에서 볼 수있는 것과 더 가깝습니다 >> Adam Powell : 당신이 단지 당신이 보여주고 싶은 목록이 있다는 것이 꽤 드뭅니다 문맥 일반적으로, 사용자에게이 목록의 내용과 관련 내용을 알려줍니다 그래서 이것을 위해 최근에 발표 된 Twitter 응용 프로그램으로 다시 돌아갑니다

여기에서 볼 수 있듯이, 우리는 그것이 무엇인지에 대한 맥락을 제공하는 몇 가지 다른 항목을 가지고 있습니다 너는보고있어 우리는 짹짹 헤더가 위로 있습니다 우리는이 경우 Google I / O의 트윗을보고 있다고 말합니다 또한 맨 아래쪽에는 우리가 마지막에 있음을 명시하는 추가 요소가 있습니다

우리는 요구에 따라 새로운 콘텐츠를로드하고 있습니다 그래서 이것은 여러 가지 다른 방법으로 머리글과 바닥 글을 처리하는 예입니다 목록보기 고정 헤더를 사용하려면 꽤 쉽습니다 다른보기를 배치하기 만하면됩니다

귀하의 ListView 위 또는 아래 그리고 아마도 레이아웃을 꽤 많이 보았을 것입니다 전에 이렇게 스크롤을 원한다면 조금 더 복잡한 하지만 우리는 약간의 작업을했습니다

당신은 그렇게 걱정하지 않아도됩니다 머리글보기 추가 및 바닥 글보기 추가 기능을 사용하면 머리글보기에 표시 할보기를 지정할 수 있습니다 어댑터의 다른 모든 목록 콘텐츠의 시작과 끝 여기에 원하는 것을 넣을 수 있습니다 그러나이 트릭은 당신이 가지고있는 것입니다

어댑터를 설정하기 전에 이러한 함수를 호출하십시오 그리고 그것은 당신에게 약간의 이것이 후드에서 어떻게 구현되는지에 대한 실마리 이 두 함수는 "선택 가능"이라는 추가 매개 변수도 사용합니다 이것은 사용중인 최종 어댑터가 다시보고 할 것인지 여부에 해당합니다 이러한 항목을 사용할 수 있음을 나타냅니다

명명 충돌이 조금 있습니다 그것에 대해 미안해 그것은 세계에서 가장 직관적 인 것이 아닙니다 그래서 당신이 짐작 했겠지만 ListView는 내부적으로 다른 어댑터 내부에 어댑터를 래핑하여 다른 뷰를 반환합니다

첫 번째 항목과 마지막 항목의 유형입니다 그럼 이걸 조심해야 할 필요가있는거야 당신이 당신의 목록에있는 어댑터를 얻는다는 가정을하지 않는다는 것입니다 처음에 어댑터를 설정하기 위해 전달한 것과 동일한 객체 인스턴스가 될 것입니다 장소

>> 로맹 가이 : 우리는 한 번 살펴볼 것입니다 리스트 셀렉터 트랙을 사용할 때 볼 수 있습니다 공을 탐색 할 수 있습니다 클릭 한 번을 선호 할 때 표시되는 내용입니다 항목을 누르거나 해당 항목을 누르기 만하면됩니다

항목을 탭하면 선택자를 볼 수 있습니다 150 밀리 초 또는 그런 식으로 잠시 동안 화면에 나타납니다 목록 선택기를 사용자 정의 할 수 있습니다 그러나 실제로 실현하는 것이 중요합니다 먼저 목록 선택기가 터치 모드로 표시되지 않습니다

트랙볼이있는 항목을 선택한 경우 언급 한 것처럼 화면을 터치하십시오 이전에 선택 항목이 나타납니다 또한 기본적으로 선택기가 뒤에 표시됩니다 항목 항목에 맞춤 설정이있는 경우 문제가 될 수 있습니다

배경, 질감 또는 사용자 정의 색상을 선택하면 볼 수 없습니다 볼 수 없습니다 선택기 ListView에서 XML에는 이에 상응하는, 상단의 그리기 선택기라는 선택기를 사용할 수 있습니다 당신이 진실하면, 그것은 정상에있을 것입니다

기본값으로 설정하면 우리의 선별자가 의지 할 것이기 때문에 당신의 품목을 볼 수 있어야합니다 그것은 잘 작동하지 않을 것입니다 여기에 우리는 컬러 노트라는 시장에 응용 프로그램이 있습니다 그것은 사용자 지정 색, 노란색 배경이 있습니다 그들은 셀렉터를 직접 만들었으므로 간단한 오렌지 테두리를 만들었습니다

그들이 한 일은 단순히 설정하는 것이 었습니다 상단의 draw selector는 ListView의 true 속성과 같아서 selector를 뒤로 이동합니다 (들리지 않는)의 위에 이제 선택자를 원한다면 필드였습니다 왜냐하면 여기가 비어있는 것을 볼 수 있기 때문입니다

따라서 오렌지색 하이라이트를 원하지만 사용자 정의 배경을 원한다면 색상, 당신은 조금 더 많은 작업을해야하고, 당신은 몇 가지 방법으로 그것을 볼 수 있습니다 슬라이드 수 이것은 작성해야하는 XML의 종류입니다 리스트 셀렉터를 생성한다 얼마나 많은 사람들이 나만의 것을 만들었습니까? 사용자 지정 선택기? 꽤 많은 수 그리고 처음에는 어떻게 작동하는지에 대해 약간 당혹 스러웠습니다

기본적으로 프레임 워크에 무엇을 (들리지 않음) 알려줄 드로어 블을 만드는 것이 아이디어입니다 그래서 우리는 윈도우가 포커스인지 여부에 관계없이 다른 상태들을 가지고 있습니다 위젯이 초점을 맞추 었는지, 위젯이 (들리지 않음) 또는 선택되었는지 여부, 세 테라 여기서 볼 수 있듯이 일반적으로 매우 정확한 상태 6 번 줄을 보면, 좋아, 항목에 초점이 맞춰져 있고 활성화되어 있지 않고 눌려 있다면, 우리는 drawable은 백그라운드에서 사용할 수 없습니다

그래서 당신이 할 수있는 최선책은 그것들을 쓰지 않는 것입니다 기스로부터 Android 플랫폼의 소스 코드 만 가져 오기만하면됩니다 또는 API 데모에 몇 가지 예가 있으며 복사하여 붙여 넣기 만하면됩니다 모든 것을 사용자의 드로어 블로 교체하십시오

여기에도 하나의 작은 트릭이 있습니다 예를 들어, 13 번 줄을 보면, 우리는 목록 선택기 배경 전환이라고하는 drawable을 참조합니다 목록에있는 항목을 길게 클릭하면 움직일 수있는 드로어 블입니다 그것은 주황색에서 백색으로 변합니다 그걸 만드는 방법에 관심이 있다면 일어난다면, 당신은 우리의 소스 코드를 확인해 볼 수 있습니다

그리고 그것을 선언하는 법을 보게 될 것입니다 애니메이션의 종류 실제로, 그것은 꽤 간단합니다 이제 목록의 항목에 맞춤 배경이 있으면 맞춤 불투명 배경을 우리는 단지 스크린 샷을 보았고 여전히 불투명 한 선택자를 원합니다 뒤에서 간단한 트릭이 있습니다

드로어 블을 선택하여 줄 수 있습니다 선택한 경우 투명하게 표시됩니다 여기에 몇 줄 밖에없는 것을 볼 수 있습니다 XML 선택한 상태 – 선택된 상태 우리는 숫자 0 인 투명한 회사를 사용합니다

그리고 다른 모든 경우에, 우리는 우리 품목에 사용하기로 결정한 색상을 사용합니다 그래서 이것은 매우 간단한 트릭이지만 완전히 새로운 방식으로 ListView를 사용자 정의 할 수 있습니다 그래서 이것은 매우 간단한 속임수이지만 ListView를 완전히 새로운 방식으로 사용자 정의 할 수 있습니다 >> Adam Powell : ListView의 몇 가지 다른 기능을 소개합니다 ListView로 작업 한 많은 사람들이 이미 알고있을 것입니다

당신이 사용할 수있는 기능의 다른 잡아 가방 그래서 우리는 그 두 사람을 정말 빨리 지나칠 것입니다 그래서 녹음 모드 얼마나 많은 사람들이 채팅 클라이언트와 비슷한 것을 작성하려고합니까? 누군가? 좋아요, 우리는 몇 가지 있습니다 잘하면 transcript mode가 유용하다는 것을 알았을 것입니다

따라서 콘텐츠가 변경되면 목록의 동작이 변경됩니다 그래서 당신의 전화가 알리면 데이터 세트가 변경되면 목록에서 다른 레이아웃을 수행합니다 이것은 우리가가는 곳을 정의합니다 새로운 콘텐츠가 생겼으니 지금으로 스크롤하십시오 사용 중지 된 경우 기본값이며 어댑터 내용에 변화가 생기면 스크롤하지 않습니다

그러나 사본 모드를 보통으로 설정하면 목록의 가장자리에있는 경우 새로운 콘텐츠가 들어 오면, 우리는 마지막으로 항목이 표시됩니다 그래서 이것은 기본적으로 당신이 채팅 클라이언트의 중간에 있으며 내역에서 뒤로 스크롤하고 새 메시지 들어 오면 바로 밑으로 스크롤하지 않을 것입니다 그러나 이미 아래쪽에서 들어오는 사물의 생생한 흐름에 관심을 기울이면 우리는 앞으로 나아가서 아래로 스크롤하여 마지막 항목을 볼 수있게 할 것입니다 그래서 당신이 채팅 클라이언트를하고 있다면, 대개는 또한 – 당신은 모든 것을 원하지 않습니다 꼭대기에서 쌓아 두는 것

그것은 일반적으로 채팅 클라이언트를 보는 방식이 아닙니다 그래서 우리는 설명 된 모든 요소를 ​​아래에서 위로 쌓아 올리는 바닥에서 스택 채팅 내역처럼 어떤 유형의 입력란과도 일치 할 수 있습니다 그 아래에 그래서 우리는 항목을 역순으로 쌓고 우리는 어댑터의 마지막 항목부터 시작하십시오 따라서 주문은 여전히 ​​동일하게 유지되지만 다르게 그것을 가로 지르는 것입니다

다시 한번, 이것은 가정을하지 않기 위해서 나옵니다 getView 호출의 순서에 관해서 다시 한번 이것은 어떤 종류의 경우에도 유용합니다 당신이 만들려고하는 채팅 클라이언트의 다음은 그 예입니다 당신은 아마 전에 아주 비슷한 것을 보았습니다

이 스크립트 모드와 스택을 모두 사용하고 있습니다 아래에서 보시다시피, 우리는 아래쪽에서 목록을 작성하므로 비어 있습니다 아래쪽이 아니라 위쪽의 공간 >> Romain Guy : 모든 목록은 기능을 지원합니다

라는 텍스트 필터링 이것은 첫 번째 장치에서 매우 유용한 기능입니다 T-Mobile G1은 키보드가 있었기 때문에 처음 나온 안드로이드 기기에서, Droid를 가지고 있다면 실제로 그 기능을 쉽게 사용할 수 있습니다 다른 장치에서, 소프트 키보 드를 사용하려면 메뉴 키를 계속 눌러 소프트 키보드를 가져와야합니다 그래서 그것이하는 일은 다음과 같습니다 – 여기 스크린 샷이 있습니다

예를 들어, 음악 응용 프로그램, 키보드를 가져 와서 입력을 시작하면 필터링 할 것입니다 리스트의 내용 그래서 우리는 무엇이든지간에 일치하는 항목 만 보여줄 것입니다 당신이 타이프했습니다 일치 규칙은 전적으로 귀하의 어댑터 우리는 기본적으로 일부 어댑터를 구현합니다

필터 예를 들어 커서 어댑터와 어레이 어댑터는 필터 배열 어댑터에서 우리는 평등 비교 그래서 만약 당신이 무엇을 입력 한 항목이 포함 된 것과 같습니다, 그럼 우리는 그것을 보여줄 것입니다 그렇지 않으면 목록에서 삭제됩니다 사용자 정의 어댑터가있는 경우 구현하는 것이 매우 간단합니다

필요한 모든 것 필터링 할 수있는 인터페이스를 구현 한 다음 get 필터 메소드를 구현해야합니다 get 필터 메서드에서 필터 클래스의 새 인스턴스를 반환해야합니다 그리고 필터 클래스에는 두 가지 메소드 만 있습니다 Android의 필터링 메커니즘에 대한 장점은 무엇입니까? 우리는 당신을 위해 모든 노력을 다하므로 우리는 백그라운드 스레드의 모든 것을 처리합니다 사용자가 타이핑을 멈 추면, 우리는이 메소드를 호출 할 것입니다

배경 스레드입니다 그래서 네가 원하는대로 할 수있어 그것은 매우 비쌀 수 있습니다 UI를 싫어하기 때문에 중요하지 않습니다 사용자가 입력 한 내용대로 신뢰 순서로 전달한 다음 ListView에 표시하려는 새 데이터 목록을 다시 작성할 수 있습니다

새로운 데이터 세트를 표시하려면 일련의 필터 결과를 리턴해야합니다 필터 result는 당신이 보여줄 항목의 수를 포함하는 간단한 클래스입니다 필터링 및 개체 그래서 그 대상은 당신이 원하는대로됩니다 그것은 오직 사용 가능합니다 – 커서 일 수도 있고, 배열이 될 수도 있고, 무엇이든 될 수 있습니다 필요한 것

그러면 필터 결과를 반환 할 때, 우리는 UI 스레드에서 publish results 메소드를 호출 할 것이고 우리는 필터 결과 객체를 돌려 준다 그리고이 방법의 직업은 단순히 추출하는 것입니다 필터 결과에 넣은 데이터는 UI 어댑터에 전달됩니다 여기는 어댑터를 수정하십시오 또한 자산이 변경되었다는 것을 알리는 곳이기도합니다

필터를 구현하는 것은 매우 간단합니다 그것은 두 가지 수업을 포함합니다 그러나 다시, if 당신은 안드로이드 소스 코드를보고 배열 어댑터의 코드를 보거나 커서 어댑터를 사용하면 어떻게 작동하는지 알 수 있으며 매우 간단합니다 여기에 흥미로운 점이 있습니다 결과 수가 0이면 원하는 결과가있을 수 있습니다

ListView에 더 이상 데이터가 없다는 것을 알리기 위해 무효화 된 자산을 호출하고 알리는 것 표시 할 수 있습니다 이제 우리는 몇 가지 문제에 대해 이야기하고 싶습니다 ListView에서 발생할 수 있습니다 얼마나 많은 사람들이 그렇게 본적 있어요? 당신은 아름다운 ListView, 사용자 정의 배경을 가지고 당신은 스크롤을 시작하고 모든 것이 검은? 그래서 몇 가지 그래서 다른 것들은 아마도 ListView의 백그라운드를 커스터마이즈하려고하지 않았다

그 이유는 최적화 쇠고기가 완료 되었기 때문입니다 ListView에서 특히 T-Mobile G1과 같은 로우 엔드 장치에서 발생하는 문제 또는 심지어 느린 장치는 많은 항목을 스크롤 할 때, 특히 당신은 수십, 수십 가지의 아이템들이 매 초마다 움직이는 것을 볼 수 있습니다 화면에 블렌딩 그리고 블렌딩은 매우 비싼 작업입니다 목록 항목 기본적으로 투명합니다

그래서 우리가하는 일은 우리가 목록 뒤에있는 색이 무엇인지 파악하려고합니다 기본적으로 우리는 색깔은이다 그것은 어떤 종류의 흑인입니다 모든 항목을 비트 맵으로 변환하면 해당 비트 맵의 ​​배경을 목록 뒤에있는 색으로 채 웁니다 일단 우리가 그렇게하면, 전체 목록이 불투명 해져서 목록 뒤에있는 창을 그려서 블렌딩을 피하는 것과 같은 최적화를 수행하십시오

우리의 2D 라이브러리에서 비 코드 경로보다 속도가 느린 코드 경로 그리고 실제로, 최적화는 화면을 터치하자마자 발생합니다 최대한 빨리 손가락이 화면에 닿으면 화면의 모든 항목이 비트 맵 그래서 그 문제에 대한 해결책은 간단하게 캐시 색상 힌트를 지정하십시오 이 ListView 배경색에 대한 표시입니다

그래서 여기에 솔루션의 첫 번째 줄과 같이 색상 0을 지정하면 ListView, 나는 단단한 배경이 없다 나는 질감이나 복잡한 배경을 가지고 있을지도 모른다 제발 최적화하지 마십시오 그러면 더 느린 코드 경로를 거치게 될 것입니다 그러나 적어도 당신은 모든 것을 볼 수있을 것입니다

기억한다면, 첫 번째 슬라이드 중 하나 인 나는 나무 질감이있는이 앱을 보여 주었다 내가 한 일이다 나는 장애인이다 캐쉬 색 힌트 단색 배경색이 있고 그 배경색이 무엇인지 알아야합니다 예를 들어, 백그라운드에서 초록색입니다

단순히 색상을 지정한 다음 갈 것입니다 ListView의 최적화를 얻으려면 올바른 결과를 얻으십시오 >> Adam Powell : 여러분 중 얼마나 많은 사람들이 전에리스트를 통해 뛰어 다니며 그것을 보았습니까? 화면의 측면을 따라 스크롤 막대 크기를 변경합니까? 예? 괜찮아 >> Romain Guy : 네가 뱀이라고 부르는거야 >> Adam Powell : 네, 뱀 효과

이것이 일어나는 이유는 다시, 왜냐하면 우리는 스크린에서 필요한만큼의 견해만을 그리기 때문입니다 조회수가 크게 늘어 났을 때 우리가 얼마나 더 많은 공간을 추정 할 수 있는지를 측정 할 수있는, 다른 높이 나머지 어댑터를 가로 질러 스크롤하는 것은 정말 어렵습니다 문제 우리가 일종의 근사를 빨리해야만하는 종류의 일입니다 왜 스크롤바가 크기가 변하는 지 보게됩니다

그래서 만약 당신이이 효과를 좋아하지 않는다면, 이것이 정말로 일종의 쇠퇴 귀하의 응용 프로그램에서 다음 가서 부드럽게 스크롤바가 false로 설정 목록에 설정할 수 있습니다 이것은 ListView가 아이템의 높이를 측정하는 것을 방해하지 않는다고 알려주는 것입니다 스크롤 공간이 얼마 남았는지 추정해볼 수 있습니다 대신 현재 위치를 사용하십시오 항목이 화면에 어떤 측면에서

이것은 조금 더 칙칙해질 것입니다 당신은 작은 데이터 세트를 가지고 있지만, 매우 큰 데이터 세트를 통해, 이것은 정말로 매끄럽게 될 것입니다 리스트가 스크롤 바의 관점에서 어떻게 보이는지 >> Romain Guy : 또 다른 해결책은 바로 스크롤 바를 삭제합니다 괜찮아 그래서 이것은 내가 많이 본 것입니다

시간과 내가 그것을 볼 때마다 나는 나의 스크린 앞에서 맹세하기 시작한다, 그리고, Joe는 나를 싫어한다 그는 내 옆에 앉아 있기 때문에 이것은 레이아웃 높이를 설정했을 때입니다 콘텐츠를 래핑하기위한 XML보기 그래서 그걸 해본 적이 있니? 괜찮아, 나는 안돼 너를 화나게했다

손을 들어주세요 괜찮아 나는 사람들이 그들의 실수를 인정할 때가 좋다 랩 콘텐츠의 문제는 ListView가 가상화 된 것입니다 따라서 ListView는 두 개의 항목을 가질 수 있습니다

수백만 개의 항목이있을 수 있습니다 그래서 그것이 우리에게 내용을 포장한다고 말하면 그것은 내가 원한다고 말한다 ListView는 콘텐츠만큼 커야합니다 우리는 백만 가지 항목과 측정을 통과해야합니까? 그들? 그것은 아마도 좋은 생각이 아닐 것입니다 너무 많은 사람들이 그것을 요구하거나 시도하고 있기 때문에 우리는 그것을 일하게 만들었습니다

작동시키지 않고 그래서 ListView의 높이를 설정하면 우리는 귀하의 목록의 처음 세 항목을 측정하려고하는 콘텐츠를 래핑합니다 실제로 많은 사람들이 그 행동에 혼란스러워합니다 때로는 메시지를 보게되기 때문입니다 우리 그룹에서 말하는, 어이, 내가 getView 메서드에 로그 문을 넣을 때, 나는 getView를 본다

아이템 번호 0, 1, 2, 그리고 0, 1, 2, 3, 4, 5를 요구하고 있습니다 다시 그리고 그들은 왜 그런지 이해하지 못합니다 그리고 그것이 이유입니다 레이아웃 중에 우리는 어댑터에 처음 세 항목을 물어볼 것입니다

우리는 그들을 측정 할 것입니다 리사이클러에 넣은 다음 우리가 요청할 실제 아이템이 필요할 때 이 항목들 그것은 비싸다 ListView에서 복잡한 항목 미친 듯이 웹 목록을 목록에 넣으면 ListView가 자체적으로 측정하는 데 많은 시간이 필요합니다

그리고 많은 시간을 너 정말 원하는게 아니야 그래서 그것을 피하거나, 채우기 부모를 사용하거나 귀하의 ListView의 높이 또는 선형 레이아웃에 있다면, 당신은 높이를 설정할 수 있습니다 0으로 설정하고 레이아웃 가중치를 사용하여 남은 사용 가능 공간을 채우도록 목록에 알릴 수 있습니다 공간 나는 또한 높이보기가 고정 된 금액으로 인도한다고 말할 것입니다 너 같이 G1에서 200 픽셀을 사용하는 200 개의 DIP를 말할 수 있습니다 >> Adam Powell : 전에 얼마나 많은 사람들이 이것을하고 싶어 했습니까? ListView 내부에 스크롤보기? 부끄러워하지 마라

손 들어 그럼 여기서 어떻게됩니까? 스크롤보기가 스크롤되고, ListView가 스크롤됩니다 이사를 시작할 때 어느 쪽을 스크롤해야합니까? 우리는 실제로 사회자가 있습니다 이 세션의 주말에 이미 요소를 추가 할 수 있는지 물어 보았습니다 또는 ListView에 대한 속성을 사용하여 ListView의 scrollable을 false로 만들 수 있습니까? 그래서 scrollView 안에 넣을 수 있고 scrollView가 처리하도록 할 수 있습니까? 그만큼 빠른 대답은 아니오이며, 그 이유는 다시 한번 ListView에 수십 개의 수천 개의 아이템이있을 수 있으며 그 안에는 정답이 있습니다

대부분의 경우 그 많은 뷰를 열어서 스크롤 뷰에 모두 던져 넣고 시스템이 그 모든 것을 처리하는 것을 꺼려하면 죽게하십시오 일반적으로 이것은 엔지니어가 질문을하는 곳입니다 좋아요 뭘 하려구? 그리고 일반적으로 그 대답은, 음, 저는 특별한 것을 갖고 싶습니다 내 목록 위 또는 아래에 있지만 대부분 내 목록 콘텐츠가 필요합니다

이보기 그래서 그 점을 지적하고 싶습니다 이미 존재하는 기존의 머리말과 꼬리말 기능으로 향합니다 레이아웃의 위 또는 아래에 배치하고 전체 레이아웃을 유지하려는 레이아웃이있는 경우 일 스크롤, 당신은 미리 가서 머리말이나 꼬리말로 앉을 수 있습니다 >> Romain Guy : 그런데, ListView를 scrollView 안에 두지 말라고 말할 때, ListView 안에 scrollView를 두지 마십시오

>> Adam Powell : 그래, 그거야 >> Romain Guy : 그래, 우리는 처음에 그 얘기를하기 전에 언급했지만, 우리는 정말로 그 시점을 주장하고 싶다면, 어댑터 내부에서 뷰를 캐쉬하지 마라 나는 그 일을 너무 여러 번 보았습니다 사람들이 시도하는 데는 여러 가지 이유가 있습니다 해

그리고 문제는 그것이 효과가있을 수 있으며 귀하의 목록이 작동 할 수있는 대부분의 시간입니다 그리고 갑자기 뭔가 이상한 일이 일어나기 시작합니다 항목을 클릭 할 수 있습니다 어쩌면 아이템에서 더 이상 작동하지 않는 애니메이션을 가지고있을 수도 있습니다 그 이유는 ListView에도 많은 최적화가 있다는 것입니다

그것은 매우 복잡하다 리사이클 러 그것은 화면에있는보기의 소유권에 대해 많은 가정을합니다 그리고 물건을 더 빨리 만드는 것은 리사이클 러에 뭔가를 넣는 것입니다 화면에서 벗어난 것은 아닙니다

보기와 마찬가지로 여전히 화면에 일종의 생각하지만 ListView 그것이 사실이 아님을 알고 있습니다 그래서 우리는 아주 조심스럽게 처리합니다 과 성능상의 이유로 다시 그리고 어댑터에서 트릭을 실행하자마자, 우리는 기본적으로 좀비보기 인보기로 끝날 것입니다 예를 들어, getView 메소드를 사용하여 우리 리사이클러에있는 뷰를 리턴한다면, 우리는 화면 상에있을 전망이지만 동시에 화면에 없습니다

그래서 프레임 워크는 그냥 포기하고 말합니다, 어쨌든 나처럼 포기해라 그래서 절대 절대 한 번도 해본 적이 없어 그 보기에 직접 액세스해야하는 경우 첫 번째 보이는 위치 가져 오기라는 메서드가 있습니다

그것은 당신의 위치가 무엇인지 알려줍니다 화면에 표시되는 첫 번째보기의 어댑터 그래서이 방법을 사용하고 (들리지 않음) 얼마나 많은 항목이 화면에 표시되는지 알려주는 계정으로 쉽게 되돌아 갈 수 있습니다 인덱스와 위치 사이를 오갈 수 있습니다 어떤 이유로 든 원한다면 (들리지 않는) 변경을하지 않고 화면의보기 색을 변경하려면 자식 가져 오기를 사용하십시오

목록을 통해 필요한보기를 얻을 수 있습니다 >> Adam Powell : 결국이 모든 일이 끝난 후, 나는 우리가 일종의 망치로 집을 지었다고 확신한다 ListView는 정말 복잡한 위젯입니다 그것은 아마도 우리가 안드로이드 프레임 워크 전반에 걸쳐 가지고있는 가장 복잡한 것일 것입니다 우리는 개발자를 돕는 것뿐만 아니라 모든 것이 작동하고, 빠르며, 최적화 된 상태로 유지됩니다

그리고 실제로, 무한 반복을 위해 최적화되었습니다 데이터 앱에 많은 복잡성이 추가됩니다 따라서 반복되는 일종의 데이터를 소량 보유하고 있다면 프레 젠 테이션, 어쩌면 당신은 실제로 그것을 위해 ListView 실제로 필요하지 않습니다 어쩌면 너 모두 이 경우 필요로하는 뷰를 동적으로 생성하여 선형 레이아웃 안에 배치해야합니다

세로 방향으로 배치하고, 해당 레이아웃을 scrollView 내에 배치합니다 그리고 이것은 가고있다 몇 가지 특별한 경우가있는 작은 데이터 세트를 사용하면 앱을 훨씬 간단하게 만들 수 있습니다 ListView를 여러분이 가지고있는 애플리케이션으로 구부리기보다는 내부에 배치하십시오 >> Romain Guy : 오늘은 꽤 많이합니다

우리는 ListView에 대해 몇 시간 동안 계속할 수있었습니다 우리가 말하지 않은 많은 특징들이 있기 때문입니다 너에게 많은 것들이있어 스터드에 대해 알고 있지만, 이제는 ListView에서 모두 지루합니다 우리는 질문을하기 시작할 것입니다

당신이 질문을하고 싶다면 당신은 골목에있는 마이크, 그리고 중재자에 대해서도 질문이 있습니다 >> Adam Powell : 그걸 가져다주고 싶니? >> Romain Guy : 부끄러워 하지마 너는 갈 수있어 질문 네가 원하는 걸 물어볼 수있어

Android와 관련 있습니다 >>> 안녕하세요 ListView를 스크롤에 넣지 말라고하셨습니다 조회수 그러나 그 뒤에있는 가정은 scrollView가 세로로 스크롤된다는 것입니다

우리가 수직 스크롤을 가지고있는 Palm Pre의 호출기와 같은 것을 모방하려는 경우 그리고 수평 페이징, 나는 어떤 사람들이하려고하는 포럼과 물건에서 보았습니다 그, 그리고 그것은 또한 Google 스포츠 응용 프로그램으로 수행되었습니다 하지만 그 특별한 앱, 내가 알 수있는 한, 지금까지는 폐쇄적 인 소식통이다 그러나 우리는 그것을 어떻게하는지 알고 싶습니다 >> Romain Guy : 기본적으로 ListView를 세로로 스크롤하고 나가기를 원합니다

페이지를 가로로 페이지하십시오 >>> 나는 비슷하지만 다른 많은 페이지를 가지고있다 내용 – >> Romain Guy : 좋습니다 당신은 가로 스크롤보기 중요한 것은 두 개의 두루마리가 같은 축

예를 들어 전체 화면에는 호출기가 있습니다 집에서 폴더를 열면 목록이므로 여전히 가로로 페이지 할 수 있습니다 그 목록을 스크롤하십시오 런처의 소스 코드를 볼 수 있습니다 신청

>> Adam Powell : workspacejava라고합니다 >> Romain Guy : workspacejava라고 불리는데, 다른 응용 프로그램에서도 그렇게 생각합니다 다른 곳

하지만 실행 소스 코드에서 workspacejava를 보면 꽤 쉽게 할 수 있습니다 >> Adam Powell : 우리는 많은 토론을했습니다 특별히이 수평 페이징을 할 수있는 위젯을 프레임 워크에 추가하는 것에 대해, 지금까지 우리는 그것을 꺼내는 가장 좋은 방법을 결정하지 않았습니다 거기 사람들이 그것을 잘 활용할 수 있는지 확인하십시오

>>> 실례합니다 내 애플 리케이션에서 볼 수있다 – 나는에서 영감을 얻으려고 노력 시장 애플 리케이션 개별 애플 리케이션을위한 방법 그것은 약간의 헤더와 몇 가지 작은 목록을 내부에 가지고 그것 나는 그것이 정말로 컸다고 생각했다 내 자신을 보지 않고 구현하기 시장 소스 코드가 어떻게 그것을했는지, 정말 까다 롭고 조금 복잡합니다 LinearLayout scrollView에 점을 찍고 싶습니다

그것은 ListView처럼 느껴지지만 그렇게하기 위해 많은 Java 코드를 수행해야했습니다 하나의 큰 대신에 XML 파일은 Java 작업을 통해 서로 묶여있는 작은 것들입니다 나는 끝났다 병합 어댑터를 사용하여, 마크 머피가 만든 일반적인 일종의 도움이된다 그 목적을 위해

따라서 많은 다른 어댑터를 통일하는 것입니다 함께 과잉이라고 느껴집니다 나는 그것을하는 방법에 뭔가 빠져 있습니까? >> Romain Guy : 아뇨 그게 방법입니다

그것을하기 위해 큰 문제는 ListView가 대부분 데이터의 긴 목록을 갖도록 설계되었으며 모든 항목은 거의 동일합니다 우리는 언급 한 것과 같이 매우 다른 항목을 지원합니다 하지만, 네가 그렇게하고 싶을 때, 불행히도, 할 일이있을거야 >>> 그리고 병합 어댑터 자체는 실제로 어떻게 추적해야하는지는 중요하지 않습니다

모든 항목의 위치 및 올바른 항목을 표시합니다 그것은 내가 결코하고 싶지 않은 것입니다 그러나 나는 이것이 그저 그렇다고 생각합니다 >> 로맹 가이 : 네 죄송합니다

>>> 좋아요 >> Romain Guy :하지만 제안이 있다면, 우리는 해결책이 있다고 확신합니다 생각 나지 마시고, 저희에게 연락 하시거나, 버그를 신고하지 않으셨습니까? 우리는 그들을 봐 그리고 우리는 앞으로의 릴리스에서 우리가 할 수있는 것을 보게 될 것입니다 도리의 질문 중 하나를 택할 것입니다

그래서 중국에서 온 래리 (Larry)는 아이템에 대한 더 많은 액션을 얻으려면 클릭하십시오 일반 사용자에게는 매우 이상합니다 연락처, 액션 메뉴와 같은 UI 위젯을 사용할 수 있습니까? 그들 자신 그래서 나는 그가 그 작은 것을 언급하고 있다고 생각한다 Android 2

0의 주소록에서 연락처를 클릭하면 팝업이 나타납니다 그리고 그 대답은 네, 물론, 당신은 그것을 가질 수 있습니다 트위터 앱은 오픈 소스가 될 것이다 그래서 당신은 소스 코드를 갖게 될 것입니다 위젯을 사용하면 사용할 수 있습니다

사실 꽤 쉽게 할 수 있습니다 아마 그것이 끝난 것을 알기 때문에 그렇게 말할 수 있습니다 그러나 일단 소스 코드를 보면 거기에 마법이없는 것을 볼 수 있습니다 >>> 감사합니다 어댑터보기를 수행하는 방법에 대한 정보는 데이터 세트의 길이를 알 수 없습니까? >> 로맹 가이 : 뭐라구? >> Adam Powell : 데이터 세트의 길이를 알 수 없습니다

>> Romain Guy : 네, 사실 그것은 달력이하는 것입니다 캘린더는 방해 할 때 당신이 의제 모드에 들어가면 기본적으로 가지고 있다고 생각합니다 무한한 목록 그리고 그들은 그걸로 놀아서 그것을합니다 변화

그래서 그들은 단지 정수라고 가정합니다 항목의 최대 값 수를 계산 한 다음 항목 수로 채 ​​웁니다 변경 사항이있을 때마다 어댑터의 항목 수를 변경할 수 있습니다 난수를 가져올 수 있고 나중에 더 많은 항목이 있다는 것을 알게되면 나중에 할 수 있습니다 그 숫자를 바꾸고 계속해라

>>> 감사합니다 >>> 나는 비트 맵을 사용하여로드하거나, (들리지 않는) 비트 맵을 사용하여 전체 뷰를 새로 고쳐야합니다 거기에 하나만 말할 수있는 방법이 있습니까? 항목별로 하나의 특정 항목이 변경됩니다 >> Romain Guy : 만약 당신이하려고한다면 – 당신이 하나의 아이템을 바꾸려고한다면 호출 알림 데이터 세트가 변경되면 전체보기가 새로 고쳐집니다 그러나 사실, ListView는 여기에서 꽤 영리합니다

여기에 우리는 복잡한 재활용 업체가 있습니다 변경하려는 항목의 대부분이 실제로 동일하다는 것을 알 수 있기 때문에 그리고 화면에 따라서 가능한 모든 것을 재사용 할 것입니다 여전히 전체 화면을 다시 그릴 것입니다 그러나 이것이 당신에게 중요한 문제라면 직접보기를 잡아, 당신은 아이를 얻을 전화를 할 수 있습니다

그렇기 때문에 눈에 띄는 자리에 get을 사용하여 위치 및 색인을 호출 한 다음 setImage 또는 원하는 것을 호출 할 수 있습니다 보기 좋은 예를 원한다면, 당신이 보아라 codegoogle

com/p/shell은 첫 번째 슬라이드에서 보여준 응용 프로그램입니다 이러한 종류의 최적화 된 코드를 지원하는 매우 복잡한 코드가 있으며 최적화 할 수 있습니다 조작법을 살펴보고이를 수행하는 방법을 볼 수 있습니다 저쪽에 >>> 안녕하세요

두 가지 질문이 있습니다 첫째, 상대 레이아웃을 사용하려고합니다 목록에 그리고 그 속성을 무시하는 것 같습니다 상대 레이아웃

>> Romain Guy : 이유를 안다 그리고 실제로 슬라이드 중 하나에 답을 표시했습니다 예, 문제는 상대 레이아웃이 있고 레이아웃 속성이 무시된다는 것입니다 그것은 매우 간단합니다 그 문서는 짜증나

그리고 다시, 그것은 완전히 우리의 잘못입니다 그래서 저는 매우 유감입니다 여기 예를 들어, 우리는 inflate를 호출합니다 마지막 매개 변수로 null을 전달합니다 Null은 부모입니다

따라서 매개 변수는 팽창중인 뷰의 부모입니다 널 (null)이라고 말함으로써, 당신은 프레임을 말하고 있고, 나는 부모가 무엇이 될지 모른다 부모가 무엇인지 모를 때 레이아웃 매개 변수가 무엇인지 모릅니다 있다 그래서 우리는 포기하고 매개 변수를주지 않습니다

우리가해야 할 일은 당신이 부모를 가르는 곳에서이 버전을 부르는 것입니다 그리고 그것이 뷰를 얻는 것이 당신에게 부모를 줄 것입니다 그래서 당신은 부모님을 통과합니다 하지만 네가 진실을 말하면, 우리는 갈거야 부모에 대한 추가 뷰를 호출합니다

하지만 ListView에서 그렇게한다면, 추락하기 그래서 거짓을 전달해야합니다 따라서 getView에있을 때마다 뭔가를 얻으면 언제나 부모를 전달하십시오 >>> 또한 빠른 스크롤을 위해 알파 인덱서를 사용하려고합니다 그리고 데이터가 변경되면 알파 인덱서를 업데이트 할 수없는 것처럼 보입니다

>> Romain Guy : 그건 현재의 한계입니다 내부적으로 어딘가에 버그가 있습니다 그 어쩌면 우리가 할 것입니다 그러나 나는 그것이 언제든지 곧 일어날 것이라고 생각하지 않는다

그래서 만약 당신이 copatch를 쓰고 싶다면, 나는 (들리지 않음) 나 자신과 갈 것이고 나는 그것을 받아들이기에 매우 기뻐하십시오 >>> 좋아요 고맙습니다 >>> 당신은 당신이 일반적으로 Android는 무엇입니까? >> Romain Guy : 우리는 시도 할 수 있습니다 >>> 좋아요

캐치 업을하고 있어요 왜냐하면 가족 이니까요 응급 상황이 어제 나를 억 누르게했다 Froyo가 해결되었거나 단어가 있습니까? 언제있을거야? >> Romain Guy : 아무 것도 알려지지 않았습니다 >>> ASP에 이미 충돌 한 것은 사실입니까? >> Romain Guy : 아무 것도 알려지지 않았습니까? 우리는 그 질문을 피하는 데 아주 능숙합니다

그러니 시도하지 마십시오 마이크가 먼저 마이크를 잡을 수 있습니까? >>> 진짜 빠른 질문 (마이크 끄기) >> Romain Guy : 슬라이드가 있으므로 몇 주 안에 모든 세션을 사용할 수 있습니다

Google I / O 웹 사이트에서 비디오와 슬라이드를 얻을 수 있습니다 >>> (마이크 끄기) >> Romain Guy : 나도 몰라 괜찮아 >>> 좋아요

그래서 내 응용 프로그램의 일부인 ListView를 가지고 있습니다 내 응용 프로그램의 일부는 측량입니다 그래서 두 기기간에 GPS를 사용하고 있습니다 너무 오래 전부터 이야기합니다 그것은하고 내가 뭘하는지, 난 그냥 ListView 요점을 바로 잡을거야 문제

따라서 사물 중 하나가 바로 그것입니다 SMS를 사용하여 메시지를주고 받고 있습니다 그래서 누군가는 당신에게 현재 위치, GPS 좌표, 또는 할 수있는 메시지를 보낼 수 있습니다 10 야드를 오른쪽으로 움직이거나 그런 식으로 움직입니다 지금은 누군가가 GPS 좌표 쌍을 보낼 때 Java reg X를 사용하여 정렬합니다

위치 정보가있는 ListView에서 채팅 창을 채우는 것, ListView가 있습니다 더 일찍 수업에서 예측과 같은 일을 할 것입니다 – 당신이 타이핑하는 동안이나 데이터가 오나요? >> 로맹 가이 : 네 필터링 중입니다 그래서 너 – >>> 내가 궁금해 하는게, 필터가 그걸로 더 적합 할까, 아니면 내가 더 좋다는거야 off – reg X가 더 빠를 것입니까? >> 로맹 가이 : 내 말은, 당신은 reg X와 필터

그것은 당신에게 달려 있습니다 나는 네 사건에서 그렇게 생각하지 않는다 >>> 나는 아무것도 잃지도 얻지도 못하고있다 JavaregX로 이동합니다

>> Romain Guy : 전혀 아닙니다 >>> 주로 대화식으로 필터링합니까? 대부분 인터랙티브를위한 것입니까? >> Romain Guy : 네 비대화 형 액션에 사용할 수 있습니다 하지만 그건 그걸 의미하지 않습니다 >>> 좋습니다

감사 >> Romain Guy : Dory의 질문입니다 따라서 어댑터를 ListView로 설정하면 어댑터가 차단되는 경우 차단 작업이 될 수 있습니다 네트워크에서 데이터를 가져옵니다 어떤 팁? 스레드를 사용하십시오 거의 모든 것이 그것입니다

UI 스레드를 차단하지 마십시오 >> Adam Powell : 여기서의 트릭은 네트워크에서 데이터를 수집하는 경우에도 커밋을 수행해야합니다 UI 스레드에서의 작업 이제 메시지를 올리면됩니다 일반 이벤트 시스템을 통해 UI 스레드에 연결하고 당신은 마지막에 가서 그 변화를 어댑터에 맡기고 메모 넥타이 데이터 세트가 변경되었습니다

>>> 안녕하세요 내 프로그램에있는 배열에서 목록 어댑터를 설정하는 목록이 있습니다 그리고 클릭 할 때 대부분의 경우 잘 작동합니다 나는 그 입장을 가지고있다 그리고 여러분들은 필터에 대해 이야기하고있었습니다

그리고 ID가 있습니다 내가 그 ID를 사용할 수 있을지 궁금 하네 그것이 있어야하는 위치에 내 배열과 관련이 있습니까? 위치가 있기 때문에, 필터가 있고 세 가지 항목이 있다면 100 배열의 항목을 선택하면 잘못된 항목이 선택됩니다 그렇다면 그들이 서로 연관 될 것이라는 것을 보장 할 수 있습니까? >> Romain Guy : 기본적으로 배열 어댑터에서, ID는 배열 안의 항목의 색인입니다 따라서 배열을 필터링하면 ID가 변경됩니다

그래서 그들은 안정적이지 않습니다 따라서 필터링을 통해 안정적으로 유지되기를 원한다면, 당신은 당신의 자신의 어댑터를 구현해야하고 어쩌면 일부를 저장하기 위해 필터를 변경해야 할 것이다 항목에 여분의 데이터가 있으므로 항목이 무엇인지 알 수 있습니다 >>> 그래서 기본적으로 데이터를 참조하고 체크해야합니다 >> 로맹 가이 : 네

>>> 좋아요 고맙습니다 >> Romain Guy : 우리는 그것이 훌륭하지 않다는 것을 압니다 죄송합니다 불행히도, 우리는 시간이 없습니다

질문들 더 많은 질문이 있으면 Android Google 그룹스 질문을 할 수있는 오버플로가 있습니다 온라인 우리 중 일부는 모니터링 중이며 시간이있을 때 질문에 대답하십시오

고맙습니다 [박수]

Android Developer Soapbox – ListView, MediaPlayer Class

Langen : 내가 개발하는 것에 대해 정말 좋아하는 것 중 하나 안드로이드 플랫폼에서 ListView입니다 음, 여러 플랫폼에서 응용 프로그램을 개발했습니다

ListView에서는 데이터를 컨트롤에 저장해야합니다 Android에서 정말 멋지 네요 그러나 나는 데이터 모델을 유지할 수 있기 때문에 나는 그들을 좋아한다 뷰는 필요할 때마다 데이터를 요청합니다 Android에서 개선되고 싶습니다

조금 더 강건 함이 추가되었습니다 미디어 플레이어 클래스에 현재 URI 나 파일 이름에서만 재생할 수 있습니다 미디어를 재생할 수 있다면 좋을 것입니다 임의의 입력 스트림으로부터