왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • unsupervised
  • labelme
  • get_long_description
  • 영상처리역사
  • pip install labelme
  • pytorch
  • yolov8
  • 딥러닝
  • maskimage
  • imageprocessing
  • UnboundLocalError
  • numpy
  • ComputerVision
  • 의료이미징
  • 기상탐사
  • matplotlib
  • tune()
  • 비지도학습
  • ckpt_file
  • labelme UnocodeDecodeError
  • encoding='utf-8'
  • 컴퓨터비전
  • TensorFlow
  • alibi-detection
  • 영상처리
  • alibidetect
  • PIL
  • PYTHON
  • 영상기술
  • OpenCV

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Android - RecyclerView - 리스트를 화면에 출력하기
Android Studio

Android - RecyclerView - 리스트를 화면에 출력하기

2023. 2. 1. 10:59
728x90

1. RecyclerView Adapter 필요한 파일 추가

  • 새로운 클래스를 생성 할 자바 파일 추가

  • RecyclerView Adapter와 연결될 레이아웃 파일 추가
    • 경로 : res - layout
    • new - Layout Resource File

  • Layout Resource File 추가
    • File name : 원하는 이름으로 설정
    • Root element : LinearLayout

 

2. 레이아웃 UI 설계

  • 간단한 테스트를 위한 텍스트뷰
  • 리니어 레이아웃은 layout_height가 wrap_content여야 여러개의 데이터를 출력 할 수 있음

ContactAdapter.java

코드 안에 주석처리로 설명

package com.hyunsungkr.contactapp.adapter;

// 1. RecyclerView.Adapter 를 상속받는다.

// 2. 상속받은 클래스가 abstract이므로, unimpLemented method 오버라이드!


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.hyunsungkr.contactapp.R;
import com.hyunsungkr.contactapp.model.Contact;

import java.util.List;


// 6. RecyclerView.Adapter의 데이터 타입을 적어줘야한다.
// 우리가 만든 ViewHolder로 적는다.

// 7. 에러가 뜨면 우리가 만든 ViewHolder로 onCreateViewHolder,
// onBindViewHolder 함수도 변경해준다.
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> {

    // 5. 어댑터 클래스의 멤버 변수와 생성자를 만들어준다.
    Context context;
    List<Contact> contactList;

    public ContactAdapter(Context context, List<Contact> contactList) {
        this.context = context;
        this.contactList = contactList;
    }

    // 8. 오버라이드 함수 3개를 전부 구현해주면 끝!
    @NonNull
    @Override
    public ContactAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // xml 파일을 연결하는 작업
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row,parent,false);
        return new ContactAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ContactAdapter.ViewHolder holder, int position) {
        // 뷰에 데이터를 셋팅한다.
        Contact contact = contactList.get(position);
        holder.txtName.setText(contact.name);
        holder.txtPhone.setText(contact.phone);


    }

    @Override
    public int getItemCount() {
        // 전체 데이터의 갯수를 적어준다.

        return contactList.size();
    }

    // 3. ViewHolder 클래스를 만든다.
    //    이 클래스는 row.XML 화면에 있는 뷰를 연결시키는 클래스다.
    //    RecyclerView.ViewHolder 상속받는다.

    // 4. 생성자를 만든다.
    // 생성자에서 뷰를 연결시키는 코드를 작성하고 클릭 이벤트도 작성한다.

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView txtName;
        TextView txtPhone;
        ImageView imgDelete;


        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            txtName = itemView.findViewById(R.id.txtName);
            txtPhone = itemView.findViewById(R.id.txtPhone);
            imgDelete = itemView.findViewById(R.id.imgDelete);
        }
    }
}

MainActivity

코드 안에 주석처리로 설명

package com.hyunsungkr.contactapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.hyunsungkr.contactapp.adapter.ContactAdapter;
import com.hyunsungkr.contactapp.data.DatabaseHandler;
import com.hyunsungkr.contactapp.model.Contact;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    Button btnAdd;

    // RecyclerView를 사용할 때
    // RecyclerView,Adapter,ArrayList를 쌍으로 적어라.
    RecyclerView recyclerView;
    ContactAdapter adapter;
    ArrayList<Contact> contactList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnAdd = findViewById(R.id.btnAdd);

        // RecyclerView를 화면에 연결하고
        // 쌍으로 같이 다니는 코드도 작성.
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));


        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this,AddActivity.class);
                startActivity(intent);

            }
        });

        // DB로 부터 데이터를 가져와서 RecyclerView에 표시하자.
        DatabaseHandler db = new DatabaseHandler(MainActivity.this);
        contactList=db.getAllContacts();
        db.close();
        // 어댑터를 만든다.
        adapter = new ContactAdapter(MainActivity.this,contactList);
        // 어댑터를 리사이클러뷰에 셋팅한다.
        recyclerView.setAdapter(adapter);



    }
}

실행 결과

이전 포스팅에서의 작성한 DB와 리스트를 화면에 출력하는 코드를 이용해서 위 사진과같은 액티비티 개발 완료

'Android Studio' 카테고리의 다른 글

Android - 다른 Activity로 데이터 전달 시 클래스의 객체를 전달하는 방법 Serializable , putExtra(), getSerializableExtra()  (0) 2023.02.01
Android - RecyclerView 어댑터에서 새로운 액티비티 실행하는 방법과 몇 번째 행을 눌렀는지 알 수 있는 getAdapterPosition()  (0) 2023.02.01
Android - SQLite3 DB 사용법  (1) 2023.01.31
Android - SharedPreferences 공유 저장소에 데이터 저장하기  (0) 2023.01.31
Android - Activity 간의 데이터 전달 방법 (단방향/양방향) / Back(뒤로가기) 이벤트 처리 방법  (0) 2023.01.30
    'Android Studio' 카테고리의 다른 글
    • Android - 다른 Activity로 데이터 전달 시 클래스의 객체를 전달하는 방법 Serializable , putExtra(), getSerializableExtra()
    • Android - RecyclerView 어댑터에서 새로운 액티비티 실행하는 방법과 몇 번째 행을 눌렀는지 알 수 있는 getAdapterPosition()
    • Android - SQLite3 DB 사용법
    • Android - SharedPreferences 공유 저장소에 데이터 저장하기
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바