Skip to content

Instantly share code, notes, and snippets.

View kozmi55's full-sized avatar

kozmi55

  • Instructure
View GitHub Profile
class UserAdapter : RecyclerView.Adapter<UserAdapter.UserHolder>(), BindableAdapter<List<Long>> {
override fun setData(items: List<Long>) {
userIds = items
notifyDataSetChanged()
}
var userIds = emptyList<Long>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserHolder {
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:data="@{viewModel.userIds}"/>
@BindingAdapter("data")
fun <T> setRecyclerViewProperties(recyclerView: RecyclerView, data: T) {
if (recyclerView.adapter is BindableAdapter<*>) {
(recyclerView.adapter as BindableAdapter<T>).setData(data)
}
}
interface BindableAdapter<T> {
fun setData(data: T)
}
@BindingAdapter("data")
fun <T> setRecyclerViewProperties(recyclerView: RecyclerView, items: List<Long>) {
if (recyclerView.adapter is UserAdapter) {
(recyclerView.adapter as UserAdapter).setData(items)
}
}
class UserAdapter : RecyclerView.Adapter<UserAdapter.UserHolder>() {
fun setData(items: List<Long>) {
userIds = items
notifyDataSetChanged()
}
var userIds = emptyList<Long>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserHolder {
class MainActivity : AppCompatActivity() {
private val viewModel = UserViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val adapter = UserAdapter()
class UserViewModel : BaseObservable() {
@get:Bindable
var userIds: List<Long> = emptyList()
private set(value) {
field = value
notifyPropertyChanged(BR.userIds)
}
private val updateInterval = 1000L
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:data="@{viewModel.userIds}"/>
@Test
fun testOpenDetailsOnItemClick() {
mockRepoUsers(1)
activityRule.launchActivity(Intent())
Espresso.onView(ViewMatchers.withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(0, ViewActions.click()))
val expectedText = "User 1: 100 pts"