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에서 소스 코드를 찾으십시오 그렇지 않으면 비디오를 공유하고 그것을 좋아하고 구독하여 우리를 지원하십시오 감사합니다