Fix broken adapter behaviour

This commit is contained in:
Phillip Thelen 2022-07-13 12:29:44 +02:00
parent 22b0b4f8a0
commit f586288c21
8 changed files with 20 additions and 21 deletions

View file

@ -123,7 +123,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>() {
)
viewModel.user.observe(this) { user ->
adapter.title = user.profile?.name ?: ""
adapter.notifyItemChanged(0)
val index = adapter.data.indexOfFirst { it.identifier == "stats" }
adapter.data[index].detailText = getString(R.string.user_level, user.stats?.lvl ?: 0)
adapter.notifyItemChanged(index+1)

View file

@ -32,6 +32,7 @@ class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>
}
adapter.data = buildSettings()
adapter.title = getString(R.string.settings)
lifecycleScope.launch {
appStateManager.isAppConnected.collect {
adapter.isDisconnected = !it
@ -49,13 +50,6 @@ class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>
private fun buildSettings(): List<SettingsItem> {
return listOf(
SettingsItem(
"header",
getString(R.string.settings),
SettingsItem.Types.HEADER,
null
) {
},
SettingsItem(
"sync",
getString(R.string.sync_data),

View file

@ -10,6 +10,11 @@ import com.habitrpg.wearos.habitica.ui.viewHolders.SpacerViewHolder
abstract class BaseAdapter<D: Any> : RecyclerView.Adapter<RecyclerView.ViewHolder >() {
var title: String = ""
set(value) {
val previous = field
field = value
notifyItemChanged(0)
}
var onRefresh: (() -> Unit)? = null
var isDisconnected = false
set(value) {
@ -31,13 +36,8 @@ abstract class BaseAdapter<D: Any> : RecyclerView.Adapter<RecyclerView.ViewHolde
}
}
override fun getItemCount(): Int {
var count = data.size
if (title.isNotBlank()) {
count++
}
return count
}
override fun getItemCount() = data.size + 1
protected fun getItemAt(position: Int) = data[position - 1]
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is HeaderViewHolder) {

View file

@ -19,13 +19,12 @@ class HubAdapter: BaseAdapter<MenuItem>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is HubViewHolder) {
holder.bind(getItemAt(position - 1))
holder.bind(getItemAt(position))
} else {
super.onBindViewHolder(holder, position)
}
}
private fun getItemAt(position: Int) = data.filter { !it.isHidden }[position]
override fun getItemViewType(position: Int) = if (position == 0) TYPE_HEADER else 1
}

View file

@ -29,10 +29,10 @@ class SettingsAdapter: BaseAdapter<SettingsItem>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is SettingsViewHolder -> {
holder.bind(data[position])
holder.bind(getItemAt(position))
}
is FooterViewHolder -> {
holder.bind(data[position].title)
holder.bind(getItemAt(position).title)
}
is SpacerViewHolder -> {
holder.bind(16.dpToPx(holder.itemView.context))
@ -42,7 +42,8 @@ class SettingsAdapter: BaseAdapter<SettingsItem>() {
}
override fun getItemViewType(position: Int): Int {
val item = data[position]
if (position == 0) return TYPE_HEADER
val item = getItemAt(position)
return when (item.type) {
SettingsItem.Types.HEADER -> TYPE_HEADER
SettingsItem.Types.FOOTER -> 1

View file

@ -23,7 +23,7 @@ open class TaskListAdapter : BaseAdapter<Any>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is TaskViewHolder) {
val item = data[position - 1] as Task
val item = getItemAt(position) as Task
holder.bind(item)
holder.onTaskScore = {
onTaskScore?.invoke(item)

View file

@ -17,6 +17,7 @@ class HabiticaRecyclerView @JvmOverloads constructor(
post {
setPadding(0, (height * 0.1).toInt(), 0, (height * 0.25).toInt())
scrollToPosition(0)
requestFocus()
}
}

View file

@ -11,6 +11,11 @@ class HabiticaScrollView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : NestedScrollView(context, attrs) {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
requestFocus()
}
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
super.onLayout(changed, l, t, r, b)
if (changed) {