RecyclerView 구현
15663 단어 안드로이드AndroidStudioKotlin안드로이드 개발
왜 RecyclerView가 필요합니까?
ListView를 설정한 View에 CoordinatorLayout을 적용할 필요가 있었기 때문에,
ListView를 RecyclerView로 마이그레이션했습니다.
CoordinatorLayout과의 협력은 또 다른 기회에.
헤더, 바닥글, 섹션 버전을 추가했습니다.
RecyclerView 헤더, 바닥글, 섹션
RecyclerView와 CoordinatorLayout과의 연계, 추가했습니다.
RecyclerView 및 CoordinatorLayout
구현
gradle
build.gradle(app)dependencies {
- 省略 -
compile 'com.android.support:recyclerview-v7:26.0.1'
}
Activity
간단한 Acitivity
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/mainRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</FrameLayout>
이번에는 11 개의 테스트 데이터를 작성하고 배치
MainActivity.ktclass MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val states = arrayListOf<RecyclerState>()
for(i in 0..10){
val state = RecyclerState()
state.text = "$i 件目"
states.add(state)
}
val adapter = RecyclerAdapter(this, states)
val recycler = findViewById<RecyclerView>(R.id.mainRecycler)
recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recycler.adapter = adapter
}
}
어댑터
RecyclerView 어댑터
RecyclerAdapter.ktclass RecyclerAdapter(
private val context: Context,
private val states: List<RecyclerState>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view = RecyclerItemView(context)
return RecyclerItemViewHolder(view)
}
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
if(viewHolder is RecyclerItemViewHolder){
viewHolder.update(states[position])
}
}
override fun getItemCount(): Int {
return states.count()
}
}
ViewHolder
레이아웃을 조작하는 클래스
RecyclerItemViewHolder.ktclass RecyclerItemViewHolder(private val view: RecyclerItemView) : RecyclerView.ViewHolder(view) {
fun update(state: RecyclerState){
view.update(state)
}
}
Custom View
셀 하나 하나의 레이아웃입니다.
없어도 ViewHolder에서 xml을 직접 설정하여 조작하는 것도 가능하지만, 만드는 편이 편리
recycler_item_view.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/recyclerItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20sp"
android:scrollbars="vertical"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="bottom"
android:background="@android:color/darker_gray"/>
</FrameLayout>
RecyclerItemView.ktclass RecyclerItemView constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr){
private val textView: TextView
init {
val rootView = LayoutInflater.from(context).inflate(R.layout.recycler_item_view, this)
textView = rootView.findViewById(R.id.recyclerItemText)
setOnClickListener {
// クリック処理
}
}
fun update(state: RecyclerState){
textView.text = state.text
}
}
완성
주의점
RecyclerAdapter.kt recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
이것이 없으면 아무것도 표시되지 않고 작은 공황이됩니다.
대신 xml에 layoutManager를 추가하여 대응하는 것도 가능
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/mainRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
</FrameLayout>
요약
ListView는 간단하고 좋았습니다.
특히 header, footer, 섹션을 자동으로 해주지 않는 점은 불편하고,
RecyclerView는 자체 구현해야합니다.
Reference
이 문제에 관하여(RecyclerView 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ijichi_y/items/7a45140d075b2466073f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gradle
build.gradle(app)
dependencies {
- 省略 -
compile 'com.android.support:recyclerview-v7:26.0.1'
}
Activity
간단한 Acitivity
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/mainRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</FrameLayout>
이번에는 11 개의 테스트 데이터를 작성하고 배치
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val states = arrayListOf<RecyclerState>()
for(i in 0..10){
val state = RecyclerState()
state.text = "$i 件目"
states.add(state)
}
val adapter = RecyclerAdapter(this, states)
val recycler = findViewById<RecyclerView>(R.id.mainRecycler)
recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recycler.adapter = adapter
}
}
어댑터
RecyclerView 어댑터
RecyclerAdapter.kt
class RecyclerAdapter(
private val context: Context,
private val states: List<RecyclerState>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view = RecyclerItemView(context)
return RecyclerItemViewHolder(view)
}
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
if(viewHolder is RecyclerItemViewHolder){
viewHolder.update(states[position])
}
}
override fun getItemCount(): Int {
return states.count()
}
}
ViewHolder
레이아웃을 조작하는 클래스
RecyclerItemViewHolder.kt
class RecyclerItemViewHolder(private val view: RecyclerItemView) : RecyclerView.ViewHolder(view) {
fun update(state: RecyclerState){
view.update(state)
}
}
Custom View
셀 하나 하나의 레이아웃입니다.
없어도 ViewHolder에서 xml을 직접 설정하여 조작하는 것도 가능하지만, 만드는 편이 편리
recycler_item_view.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/recyclerItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20sp"
android:scrollbars="vertical"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="bottom"
android:background="@android:color/darker_gray"/>
</FrameLayout>
RecyclerItemView.kt
class RecyclerItemView constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr){
private val textView: TextView
init {
val rootView = LayoutInflater.from(context).inflate(R.layout.recycler_item_view, this)
textView = rootView.findViewById(R.id.recyclerItemText)
setOnClickListener {
// クリック処理
}
}
fun update(state: RecyclerState){
textView.text = state.text
}
}
완성
주의점
RecyclerAdapter.kt recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
이것이 없으면 아무것도 표시되지 않고 작은 공황이됩니다.
대신 xml에 layoutManager를 추가하여 대응하는 것도 가능
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/mainRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
</FrameLayout>
요약
ListView는 간단하고 좋았습니다.
특히 header, footer, 섹션을 자동으로 해주지 않는 점은 불편하고,
RecyclerView는 자체 구현해야합니다.
Reference
이 문제에 관하여(RecyclerView 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ijichi_y/items/7a45140d075b2466073f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
RecyclerAdapter.kt
recycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
이것이 없으면 아무것도 표시되지 않고 작은 공황이됩니다.
대신 xml에 layoutManager를 추가하여 대응하는 것도 가능
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/mainRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
</FrameLayout>
요약
ListView는 간단하고 좋았습니다.
특히 header, footer, 섹션을 자동으로 해주지 않는 점은 불편하고,
RecyclerView는 자체 구현해야합니다.
Reference
이 문제에 관하여(RecyclerView 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ijichi_y/items/7a45140d075b2466073f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(RecyclerView 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ijichi_y/items/7a45140d075b2466073f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)