본문 바로가기
안드로이드 스튜디오 앱 개발/개념 안드로이드 스튜디오

안드로이드 스튜디오 리사이클러뷰 만들기 [Android Studio]

by 망댕이 2023. 6. 19.
반응형

애플리케이션을 이용하면서 몇 가지의 아이템(항목)들이 리스트로 하여금 세로로 드래그하여 넘길 수 있는 화면을 많이 보았을 것입니다.

 

 

예를 들어 카카오톡의 채팅 화면에서 하나의 뷰에 단톡방 사진, 단톡방 이름, 단톡방 인원수로 각각의 아이템으로 이뤄진 것을 확인할 수 있습니다.

 

| 리사이클러뷰란?

이런 리스트 모양으로 화면은 리사이클러뷰를 사용하여 제작할 수 있습니다.

 

하지만 단순히 리사이클러뷰로만 화면이 이루어지는 것이 아니라 Adapter라는 클래스를 이용하여 데이터를 직접 리사이클러뷰에서 사용하지 않고 Adapter에서 사용합니다.

 

여러 개의 아이템이 표시되는 곳은 어댑터를 통하여 각 아이템이 화면에 구성됩니다.

 

 

 

- 리사이클러뷰 만들기 위한 순서 -

 

1. Adapter 안에 담길 각각의 아이템의 정보를 담은 클래스를 하나 생성합니다.

 

2. 각각의 아이템을 위한 xml 레이아웃 파일을 만듭니다.

 

3. Adapter를 만듭니다.

 

4. 2번에서 만들었던 Adapter가 담긴 recyclerView를 액티비티에 작성해 줍니다.

 

 

 

<Adapter 안에 담길 각각의 아이템의 정보를 담은 클래스를 하나 생성하기>

 

각각의 아이템의 정보를 담을 클래스를 하나 생성해 줍니다.

여기서는 이름, 나이, 번호를 담기 위해 name, age, number 3가지로 작성했습니다.

 

-Info-

public class Info {

    String name;

    String age;

    String number;

​

    public Info(String name, String age, String number) {

        this.name = name;

        this.age = age;

        this.number = number;

    }

​

    public String getName() {

        return name;

    }

​

    public void setName(String name) {

        this.name = name;

    }

​

    public String getAge() {

        return age;

    }

​

    public void setAge(String age) {

        this.age = age;

    }

​

    public String getNumber() {

        return number;

    }

​

    public void setNumber(String number) {

        this.number = number;

    }

}

이렇게 name, age, number를 마우스 오른쪽 버튼 후 generate - constructor, getter&setter를 이용하여 작성해 줍니다.

 

<각각의 아이템을 위한 xml 레이아웃 파일을 만들기>

 

name, age, number가 textView_1,2,3으로 각각 들어갈 수 있는 xml 파일을 생성해 줍니다.

 

<Adapter를 만들기>

-InfoAdapter-

public class InfoAdapter extends RecyclerView.Adapter<InfoAdapter.ViewHolder>{

    ArrayList<Info> items = new ArrayList<Info>();

​

@NonNull

    @Override

public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());

        View itemView = inflater.inflate(R.layout.info, parent, false);

​

        return new ViewHolder(itemView);

}

​

@Override

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        Info item = items.get(position);

        holder.setItem(item);

}

​

@Override

public int getItemCount() {

        return items.size();

}

​

public void addItem(Info item) {

        items.add(item);

}

​

public void setItems(ArrayList<Info> items) {

        this.items = items;

}

​

public Info getItem(int position) {

        return items.get(position);

}

​

public void setItem(int position, Info item) {

        items.set(position, item);

}

​

static class ViewHolder extends RecyclerView.ViewHolder {

        TextView textView1;

        TextView textView2;

        TextView textView3;

​

​

        public ViewHolder(@NonNull View itemView) {

                super(itemView);

​

                textView1 = itemView.findViewById(R.id.textView_1);

                textView2 = itemView.findViewById(R.id.textView_2);

                textView3 = itemView.findViewById(R.id.textView_3);

        }

        public void setItem(Info item){

        textView1.setText(item.getName());

        textView2.setText(item.getAge());

        textView3.setText(item.getNumber());

        }

}
}

 

Adapter에서 각각의 아이템이 들어간 뷰는 뷰홀더에 담아둘 수 있도록 합니다.

onCreateViewHolder()는 뷰홀더가 생성됐을 때 인플레이션을 통해 뷰 개체를 만들어 그 뷰 객체를 전달하고 반환합니다.

onBindViewHolder()는 재활용할 수 있는 뷰홀더 객체를 전달해 사용하기 때문에 현재 아이템에 일치하는 데이터를 이용합니다.

이러한 식으로 Adapter를 작성해 줍니다.

 

 

<아까 만들었던 Adapter가 담긴 recyclerView를 액티비티에 작성해 주기>

-MainActivity-

public class MainActivity extends AppCompatActivity {

​

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

​

RecyclerView recyclerView = findViewById(R.id.recyclerView);

​

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);

recyclerView.setLayoutManager(layoutManager);

InfoAdapter adapter = new InfoAdapter();

​

adapter.addItem(new Info("홍길동", "20", "111"));

recyclerView.setAdapter(adapter);

}

}

 

activity_main.xml에 recyclerView를 집어넣고 레이아웃 매니저를 이용하여

리사이클러뷰가 보일 가로, 세로방향을 설정할 수 있습니다.

그리고 adapter.addItem(new Info("", "", ""));을 이용해 아이템을 추가할 수 있습니다.

 

반응형