RecyclerView 사용 예(Kotlin)
15433 단어 AndroidKotlinRecyclerView
이 기사는?
android의 RecyclerView를 사용하고 싶습니다. 자신과 같은 초보자이기 때문에 사용법의 예를 하나 드리겠습니다.
자신이 참고한 것은 아래 두 사이트이지만 코드를 베껴도 그렇게 움직이지 않기 때문에 장소마다 다르다.
- Getting Started With RecyclerView in Android — Kotlin
- Create a List with RecyclerView
※ SQLite와의 데이터 협업은 별도로 작성되지 않았습니다.
코드
다음은 자신의 코드입니다.
'diary'라는 단어가 나온 것은 자신이 일기 앱을 하고 있기 때문이다.
build.gradle(Module: app)
추적한 것은 아래의 dependencies 한 줄뿐이다.apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.myapp.todidlist"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.android.support:support-v4:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"
// ↓追加した部分
implementation 'com.android.support:recyclerview-v7:26.1.0'
}
kotlin {
experimental {
coroutines "enable"
}
}
XML
RecyclerView 외부 섹션
Toolbar의 layout_Height의'?attr/actionBarSize'는 자신의 환경에서 적자이지만 이동합니다.
가장 바깥쪽 배치를 android.support.constraint.ConstraintLayout
로 설정하면 "Toolbar와 RecyclerView가 중첩되고 맨 위 요소가 숨겨집니다"현상이 발생하여 LinearLayout
로 변경됩니다.
activity_main_stack.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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_stack_page_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:titleTextColor="@color/colorToolbarBottun" />
<android.support.v7.widget.RecyclerView
android:id="@+id/diary_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_constraintTop_toBottomOf="@+id/main_stack_page_toolbar" />
</LinearLayout>
Adapter가 RecyclerView에서 Stack의 한 요소를 나타내는 XML
diary_list_item.xml<?xml version="1.0" encoding="utf-8"?>
<!--このTextViewがRecyclerViewの一要素として表示される-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:padding="20dp"/>
.kt 파일
Activity
diary_recycler_view
activity_main_stack.xml의 RecyclerView id입니다.
MainStackActivity.ktpackage com.example.myapp.todidlist
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main_stack.*
class MainStackActivity : AppCompatActivity() {
var diaryTextList: ArrayList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_stack)
addDiary()
diary_recycler_view.layoutManager = LinearLayoutManager(this)
diary_recycler_view.adapter = DiaryAdapter(diaryTextList)
}
fun addDiary() {
diaryTextList.add("diary1")
diaryTextList.add("diary2")
diaryTextList.add("diary3")
diaryTextList.add("diary4")
diaryTextList.add("diary5")
diaryTextList.add("diary6")
diaryTextList.add("diary7")
diaryTextList.add("diary8")
diaryTextList.add("diary10")
diaryTextList.add("diary11")
diaryTextList.add("diary12")
diaryTextList.add("diary13")
}
}
Adapter
DiaryAdapter.ktpackage com.example.myapp.todidlist
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
class DiaryAdapter(private val myDataset: ArrayList<String>) :
RecyclerView.Adapter<DiaryAdapter.ViewHolder>() {
// RecyclerViewの一要素となるXML要素の型を引数に指定する
// この場合はdiary_list_item.xmlのTextView
class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DiaryAdapter.ViewHolder {
val textView = LayoutInflater.from(parent.context)
.inflate(R.layout.diary_list_item, parent, false) as TextView
return ViewHolder(textView)
}
// 第1引数のViewHolderはこのファイルの上のほうで作成した`class ViewHolder`です。
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = myDataset[position]
}
override fun getItemCount() = myDataset.size
}
실행 결과
환경
다음은 자신의 코드입니다.
'diary'라는 단어가 나온 것은 자신이 일기 앱을 하고 있기 때문이다.
build.gradle(Module: app)
추적한 것은 아래의 dependencies 한 줄뿐이다.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.myapp.todidlist"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.android.support:support-v4:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"
// ↓追加した部分
implementation 'com.android.support:recyclerview-v7:26.1.0'
}
kotlin {
experimental {
coroutines "enable"
}
}
XML
RecyclerView 외부 섹션
Toolbar의 layout_Height의'?attr/actionBarSize'는 자신의 환경에서 적자이지만 이동합니다.
가장 바깥쪽 배치를
android.support.constraint.ConstraintLayout
로 설정하면 "Toolbar와 RecyclerView가 중첩되고 맨 위 요소가 숨겨집니다"현상이 발생하여 LinearLayout
로 변경됩니다.activity_main_stack.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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_stack_page_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:titleTextColor="@color/colorToolbarBottun" />
<android.support.v7.widget.RecyclerView
android:id="@+id/diary_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_constraintTop_toBottomOf="@+id/main_stack_page_toolbar" />
</LinearLayout>
Adapter가 RecyclerView에서 Stack의 한 요소를 나타내는 XML
diary_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<!--このTextViewがRecyclerViewの一要素として表示される-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:padding="20dp"/>
.kt 파일
Activity
diary_recycler_view
activity_main_stack.xml의 RecyclerView id입니다.MainStackActivity.kt
package com.example.myapp.todidlist
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main_stack.*
class MainStackActivity : AppCompatActivity() {
var diaryTextList: ArrayList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_stack)
addDiary()
diary_recycler_view.layoutManager = LinearLayoutManager(this)
diary_recycler_view.adapter = DiaryAdapter(diaryTextList)
}
fun addDiary() {
diaryTextList.add("diary1")
diaryTextList.add("diary2")
diaryTextList.add("diary3")
diaryTextList.add("diary4")
diaryTextList.add("diary5")
diaryTextList.add("diary6")
diaryTextList.add("diary7")
diaryTextList.add("diary8")
diaryTextList.add("diary10")
diaryTextList.add("diary11")
diaryTextList.add("diary12")
diaryTextList.add("diary13")
}
}
Adapter
DiaryAdapter.kt
package com.example.myapp.todidlist
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
class DiaryAdapter(private val myDataset: ArrayList<String>) :
RecyclerView.Adapter<DiaryAdapter.ViewHolder>() {
// RecyclerViewの一要素となるXML要素の型を引数に指定する
// この場合はdiary_list_item.xmlのTextView
class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DiaryAdapter.ViewHolder {
val textView = LayoutInflater.from(parent.context)
.inflate(R.layout.diary_list_item, parent, false) as TextView
return ViewHolder(textView)
}
// 第1引数のViewHolderはこのファイルの上のほうで作成した`class ViewHolder`です。
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = myDataset[position]
}
override fun getItemCount() = myDataset.size
}
실행 결과
환경
Reference
이 문제에 관하여(RecyclerView 사용 예(Kotlin)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gitboku/items/4dc00ad0251c56e3d746텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)