티스토리 뷰
뷰를 반복적으로 나타내기 위한 여러 가지 방법들이 존재합니다.
보통 다음의 세 가지 방법으로 뷰를 반복적으로 나타낼 수 있습니다.
1. AddView
2. ListView
3. RecycleView
이 중에서 애드뷰는 실제로 잘 사용되는 방법은 아니라고 합니다. 그러나 애드뷰를 기본적으로 알아야 나중에 리스트뷰와 리사이클뷰를 이해하는 데에 도움이 될 것입니다.
리스트뷰는 이전에 많이 사용되었던 방법이고, 최근에는 효용성 때문에 리사이클뷰를 사용한다고 합니다.
애드뷰 AddView를 제작하는 순서는 다음으로 요약할 수 있습니다.
1. 아이템을 담게 될 XML 파일을 만듭니다.
2. XML에 텍스트나 이미지뷰 등으로 내용을 채워줍니다.
3. 컨테이너 뷰에 이를 더해줍니다.
4. 반복시킵니다.
실제로 애드뷰를 사용해서 리스트뷰를 만들어 보도록 하겠습니다.
우선 각각의 아이템을 담게 될 XML 파일입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/textView_color"
android:padding="10dp">
//LinearLayout으로 아이템 한 줄을 수평으로 감싼다
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
//아이템은 gravity="center"로 두어 중간에 오도록 합니다.
<TextView
android:id="@+id/guest_name"
android:gravity="center"
android:textSize="50dp"
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
// 텍스트 사이에 1dp 폭의 흰 선이 생기도록 합니다.
<TextView
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/white" />
<TextView
android:id="@+id/waiting"
android:gravity="center"
android:textSize="50dp"
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
//아이템 마다 흰 선이 생기도록 합니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff"/>
</LinearLayout>
이후에는 컨테이너 역할을 하는 XML 파일을 만들게 됩니다. ID가 addview_container인 뷰를 하나 그려주고, 이를 스크롤 뷰로 감싸줍니다. 스크롤뷰에서 fillViewport를 'true'로 해주셔야 합니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Addview">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/addview_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</ScrollView>
</LinearLayout>
다음은 액티비티 파일입니다.
class Addview : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.practice_addview)
val waitingList = ArrayList<WaitForList>()
for (i in 0 until 10){
waitingList.add(WaitForList("" + i + "번째 손님", "" + i + "번째 대기번호"))
}
val container = findViewById<LinearLayout>(R.id.addview_container)
val inflater = this@Addview.layoutInflater
for (i in 0 until waitingList.size){
val itemView = inflater.inflate(R.layout.item_view, null)
val guestNameView = itemView.findViewById<TextView>(R.id.guest_name)
val waitingView = itemView.findViewById<TextView>(R.id.waiting)
guestNameView.setText(waitingList.get(i).guest_number)
waitingView.setText(waitingList.get(i).waiting_number)
container.addView(itemView)
}
}
}
class WaitForList(val guest_number: String, val waiting_number: String){
}
액티비티 파일을 보면 먼저 아이템을 리스트로 보여줄 수 있도록 준비합니다.
val waitingList = ArrayList<WaitForList>()
for (i in 0 until 10){
waitingList.add(WaitForList("" + i + "번째 손님", "" + i + "번째 대기번호"))
}
practice_addview.xml 파일의 컨테이너뷰를 ID를 통해서 가져오는 코드입니다. 이 컨테이너 뷰에 아이템 하나가 들어가게 됩니다.
val container = findViewById<LinearLayout>(R.id.addview_container)
이제 컨테이너에 뷰를 더해주는 작업이 필요합니다. 뷰를 더해주기 위해서는 컨테이너에 inflater를 사용해서 뷰를 붙여주는 작업을 해줘야 합니다. inflate는 아이템 뷰를 지니고, 이 아이템을 붙여줄 컨테이너를 가리키게 됩니다. 아래의 코드처럼 말이죠. inflater의 inflate 메소드가 item_view를 찾은 다음에, container로 붙여준다고 이해하시면 됩니다.
val itemView = inflater.inflate(R.layout.item_view, container)
이렇게 하나의 itemView가 완성되었으면, item_view.xml 파일에서 ID값으로 실제 텍스트뷰들을 찾아줘야 합니다.
val guestNameView = itemView.findViewById<TextView>(R.id.guest_name)
val waitingView = itemView.findViewById<TextView>(R.id.waiting)
이제 이러한 텍스트뷰 들이 별도로 만든 클래스인 WaitForList의 인수로 들어갈 수 있도록 코딩해줍니다.
guestNameView.setText(waitingList.get(i).guest_number)
waitingView.setText(waitingList.get(i).waiting_number)
마지막으로 컨테이너에 addView 메소드를 통해 itemView를 더해주면 됩니다.
container.addView(itemView)
아이템 뷰를 변수로 선언한 곳부터, 컨테이너에 뷰를 더해주는 부분까지 반복문으로 감싸 리스트로 나올 수 있도록 합니다. 이는 다음과 같습니다. waitingList는 손님 번호와 대기 번호를 인자로 받는 클래스인 WaitForList를 ArrayList 형태로 받아서 0~10번까지 보여주는데, 이를 waitingList.size, 즉 해당 변수의 크기만큼 다시 반복시켜서 보여주는 액티비티입니다.
for (i in 0 until waitingList.size){
val itemView = inflater.inflate(R.layout.item_view, null)
val guestNameView = itemView.findViewById<TextView>(R.id.guest_name)
val waitingView = itemView.findViewById<TextView>(R.id.waiting)
guestNameView.setText(waitingList.get(i).guest_number)
waitingView.setText(waitingList.get(i).waiting_number)
container.addView(itemView)
}
최종 결과는 다음과 같습니다.
'Android App Coding' 카테고리의 다른 글
토스트 메시지 Toast (0) | 2021.07.09 |
---|---|
리스트뷰와 어댑터 ListView & Adapter (0) | 2021.07.09 |
라이브러리 사용하기 Library (0) | 2021.07.09 |
스레드 Thread (0) | 2021.07.09 |
컨텍스트 Context (0) | 2021.07.09 |
- Total
- Today
- Yesterday
- 인텐트
- view binding
- 뷰 바인딩
- lazy init
- 안드로이드 스튜디오 에러
- 안드로이드 앱 만들기
- findViewById
- 안드로이드 프로젝트
- 대한민국 미제사건
- 2019년 사건사고
- 선형 레이아웃
- 미제사건
- 상대적 레이아웃
- 안드로이드 어댑터
- Bmi Calculator
- 2007년 사건사고
- ToDo List 앱 만들기
- 리사이클러뷰
- 자바스크립트 배열
- 2021년 사건사고
- notifyDataSetChanged
- android adapter
- addView
- bmi 계산기 만들기
- RecyclerView
- 리스트뷰
- 애드뷰
- 메소드 오버라이딩
- tabLayout
- 탭레이아웃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |