728x90
반응형
리사이클러뷰를 추가합니다.
Person이라는 자바 클래스를 만들고 사용할 변수를 선언합니다.
Alt+Insert키를 누르거나 마우스 우클릭으로 Generate를 눌러 Constructor을 클릭합니다.
3개의 파라미터를 선택합니다.
추가된 모습입니다.
그 다음으로 Getter and Setter를 선택하고
모두 선택하여 OK를 누릅니다.
완성된 자바 소스
package com.example.tistory;
public class Person {
String name;
String phoneNumber;
String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person(String name, String phoneNumber, String address) {
this.name = name;
this.phoneNumber = phoneNumber;
this.address = address;
}
}
완성된 후에 Adapter가 필요합니다.
PersonAdapter라는 자바 클래스를 새로 만듭니다.
소스를 작성합니다.
package com.example.tistory;
import android.view.View;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
public class PersonAdapter {
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextView textView2;
TextView textView3;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
textView3 = itemView.findViewById(R.id.textView3);
}
public void setItem(Person item) {
textView.setText(item.getName());
textView2.setText(item.getPhoneNumber());
textView3.setText(item.getAddress());
}
}
}
이걸 보고 따라하신 분들은 itemView.findViewById(R.id.textView); 이 구간에서 빨간줄이 뜰텐데
그냥 무시하시면 됩니다.
그 다음에 PersonAdapter 클래스가 RecyclerView.Adapter를 상속받게 수정합니다.
그리고 Generate에서 Implement Methods를 선택하여 모든 메서드를 추가합니다.
package com.example.tistory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder> {
ArrayList<Person> items = new ArrayList<Person>();
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View itemView = inflater.inflate(R.layout.person_item, viewGroup, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
Person item = items.get(position);
viewHolder.setItem(item);
}
@Override
public int getItemCount() {
return items.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextView textView2;
TextView textView3;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
textView3 = itemView.findViewById(R.id.textView3);
}
public void setItem(Person item) {
textView.setText(item.getName());
textView2.setText(item.getPhoneNumber());
textView3.setText(item.getAddress());
}
}
}
위 소스를 추가하면
View itemView = inflater.inflate(R.layout.person_item, viewGroup, false);
이 부분에서 빨간줄이 뜰텐데 이제 추가하면 됩니다.
xml을 작성합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이름"
android:textSize="19sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전화번호"
android:textSize="19sp" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="주소"
android:textSize="19sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
그 다음 PersonAdapter클래스에 소스를 추가해줍니다.
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder> {
// 중략
public void addItem(Person item) {
items.add(item);
}
public void setItems(ArrayList<Person> items) {
this.items = items;
}
public Person getItem(int position) {
return items.get(position);
}
public void setItem(int posotion, Person item) {
items.set(posotion, item);
}
// 중략
}
MainActivity에 소스 추가
package com.example.tistory;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
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);
PersonAdapter adapter = new PersonAdapter();
adapter.addItem(new Person("홍길동", "010-1234-5678", "서울시 어딘가"));
adapter.addItem(new Person("홍가", "010-1111-1111", "경기도 어딘가"));
adapter.addItem(new Person("김길동", "010-2222-2222", "충청도 어딘가"));
adapter.addItem(new Person("김가", "010-3333-3333", "강원도 어딘가"));
adapter.addItem(new Person("이길동", "010-4444-4444", "대한민국 어딘가"));
recyclerView.setAdapter(adapter);
}
}
실행화면
728x90
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 리사이클러뷰 아이템 구분선 추가 / 간격 조절 (0) | 2019.12.31 |
---|---|
안드로이드 스튜디오 리사이클러뷰 아이템 라운딩(둥글게) (0) | 2019.12.31 |
do it 안드로이드 도전 과제 도전 03 ~ 04 (0) | 2019.11.27 |
do it 안드로이드 도전과제 도전 01 ~ 02 (0) | 2019.11.27 |
안드로이드 스튜디오 프로그레스바 사용하기 ( 원형 ) (0) | 2019.11.16 |