Groupie의 ViewHolder를 사용해 보았습니다.
6566 단어 안드로이드MaterialDesignGroupiegradle
htps // 왓 ly-gm. 하테나 bぉg. 코m/엔트리/2020/06/05/222302
Groupie의 ViewHolder를 사용해 보았습니다.
[ htps : // 기주 b. 코 m / ぃ사 w 등 y / g 로피에 / ぇ 아세 s : 에 m 베 d : ]
Groupie는 Android의 recycler-view를 쉽게 사용할 수있는 라이브러리이지만 groupie-databinding은 deprecated되었습니다.
이번에는 권장되는 (Poi) groupie-viewbinding을 사용하고 싶습니다.
1. Groupie 추가
기본적으로 github Gradle Setup을 보면 괜찮습니다. 모듈 레벨 build.gradle에 다음을 추가하면 괜찮습니다.
android {
....
androidExtensions {
experimental = true
}
viewBinding {
enabled = true
}
}
dependencies {
....
def groupie_version = "2.8.0"
implementation "com.xwray:groupie:$groupie_version"
implementation "com.xwray:groupie-kotlin-android-extensions:$groupie_version"
implementation "com.xwray:groupie-viewbinding:$groupie_version"
}
추가로, 2020 년 6 월 5 일 현재, 다음과 같은 오류가 발생하기 때문에 약간의 대응이 필요했습니다.
ERROR: Failed to resolve: com.xwray:groupie-viewbinding:2.8.0
ISSUE에 따르면, 곧 출시되기 때문에 오류가 발생한 것 같습니다.
프로젝트 레벨 build.gradle에 한 줄 추가하여 해당합니다.
allprojects {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/lisawray/maven' } // この行を追加
}
}
2. 나열할 항목 만들기
목록의 항목이 될 클래스와 레이아웃 파일을 만듭니다.
클래스는 이런 식으로,
bind
메소드로 view-binding을 사용하면 좋을 것 같습니다. 즐겁네요.``TopListItem.kt
package wally.wally.android_practice
import android.view.View
import com.xwray.groupie.viewbinding.BindableItem
import wally.wally.android_practice.databinding.ItemTopListBinding
class TopListItem(private val text: String) : BindableItem() {
override fun getLayout() = R.layout.item_top_list
override fun bind(viewBinding: ItemTopListBinding, position: Int) {
viewBinding.button.text = text
}
override fun initializeViewBinding(view: View): ItemTopListBinding {
return ItemTopListBinding.bind(view)
}
}
``
xml은 다음과 같습니다.
``item_top_list.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:backgroundTint="@color/primaryLight"
tools:text="ボタン" />
</androidx.constraintlayout.widget.ConstraintLayout>
``
이번에는 무엇을 생각했는지 머티리얼 디자인 버튼을 사용했습니다.
이 버튼은 액티비티가 머티리얼 컴포넌트 테마를 적용해야 하는 것처럼 보였기 때문에 매니페스트 파일도 줄어듭니다.
목록의 항목에 머티리얼 버튼을 사용하지 않으면 필요하지 않습니다.
<activity
android:name=".MainActivity"
android:theme="@style/Theme.MaterialComponents.Light" <= マテリアルボタンを設置する場合はテーマを適用
tools:ignore="LockedOrientationActivity"
3. recycler-view를 설치하여 목록을 표시합니다.
xml에 recycler-view를 설치하십시오.
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
MainActivity에서 GroupieAdapter를 만들고 recyclerView 어댑터로 만듭니다.
``
package wally.wally.android_practice
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.xwray.groupie.GroupAdapter
import com.xwray.groupie.GroupieViewHolder
import wally.wally.android_practice.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate (savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val adapter = GroupAdapter()
binding.recyclerView.adapter = adapter
binding.lifecycleOwner = this
binding.recyclerView.layoutManager = LinearLayoutManager(this)
adapter.update((1..30).map { TopListItem("テストボタン${it}") })
adapter.add(TopListItem("テストボタンファイナル"))
}
}
大事なのはここです.
recyclerVIewにはレスポンシブに対応するためのlayoutManagerが存在しますのでこちらも設定する必要があります.
リストをまとめて渡すだけで表示してくれますし, 1つだけ追加したい場合は `add` メソッドを使ってあげればいいです(この辺はview-holderというよりgroupieの機能)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val adapter = GroupAdapter()
binding.recyclerView.adapter = adapter
binding.lifecycleOwner = this
binding.recyclerView.layoutManager = LinearLayoutManager(this)
adapter.update((1..30).map { TopListItem("테스트 버튼 ${it}") })
adapter.add(TopListItem("테스트 버튼 최종"))
``
결국 이런 식으로 나타납니다.
Reference
이 문제에 관하여(Groupie의 ViewHolder를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/WallyNegima/items/f1a161b6ec06ff00aa4d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)