mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-18 19:59:00 +00:00
Fix broken adapter behaviour
This commit is contained in:
parent
22b0b4f8a0
commit
f586288c21
8 changed files with 20 additions and 21 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ class HabiticaRecyclerView @JvmOverloads constructor(
|
|||
post {
|
||||
setPadding(0, (height * 0.1).toInt(), 0, (height * 0.25).toInt())
|
||||
scrollToPosition(0)
|
||||
requestFocus()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue