mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +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 ->
|
viewModel.user.observe(this) { user ->
|
||||||
adapter.title = user.profile?.name ?: ""
|
adapter.title = user.profile?.name ?: ""
|
||||||
adapter.notifyItemChanged(0)
|
|
||||||
val index = adapter.data.indexOfFirst { it.identifier == "stats" }
|
val index = adapter.data.indexOfFirst { it.identifier == "stats" }
|
||||||
adapter.data[index].detailText = getString(R.string.user_level, user.stats?.lvl ?: 0)
|
adapter.data[index].detailText = getString(R.string.user_level, user.stats?.lvl ?: 0)
|
||||||
adapter.notifyItemChanged(index+1)
|
adapter.notifyItemChanged(index+1)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter.data = buildSettings()
|
adapter.data = buildSettings()
|
||||||
|
adapter.title = getString(R.string.settings)
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
appStateManager.isAppConnected.collect {
|
appStateManager.isAppConnected.collect {
|
||||||
adapter.isDisconnected = !it
|
adapter.isDisconnected = !it
|
||||||
|
|
@ -49,13 +50,6 @@ class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>
|
||||||
|
|
||||||
private fun buildSettings(): List<SettingsItem> {
|
private fun buildSettings(): List<SettingsItem> {
|
||||||
return listOf(
|
return listOf(
|
||||||
SettingsItem(
|
|
||||||
"header",
|
|
||||||
getString(R.string.settings),
|
|
||||||
SettingsItem.Types.HEADER,
|
|
||||||
null
|
|
||||||
) {
|
|
||||||
},
|
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
"sync",
|
"sync",
|
||||||
getString(R.string.sync_data),
|
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 >() {
|
abstract class BaseAdapter<D: Any> : RecyclerView.Adapter<RecyclerView.ViewHolder >() {
|
||||||
var title: String = ""
|
var title: String = ""
|
||||||
|
set(value) {
|
||||||
|
val previous = field
|
||||||
|
field = value
|
||||||
|
notifyItemChanged(0)
|
||||||
|
}
|
||||||
var onRefresh: (() -> Unit)? = null
|
var onRefresh: (() -> Unit)? = null
|
||||||
var isDisconnected = false
|
var isDisconnected = false
|
||||||
set(value) {
|
set(value) {
|
||||||
|
|
@ -31,13 +36,8 @@ abstract class BaseAdapter<D: Any> : RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount() = data.size + 1
|
||||||
var count = data.size
|
protected fun getItemAt(position: Int) = data[position - 1]
|
||||||
if (title.isNotBlank()) {
|
|
||||||
count++
|
|
||||||
}
|
|
||||||
return count
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
if (holder is HeaderViewHolder) {
|
if (holder is HeaderViewHolder) {
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,12 @@ class HubAdapter: BaseAdapter<MenuItem>() {
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
if (holder is HubViewHolder) {
|
if (holder is HubViewHolder) {
|
||||||
holder.bind(getItemAt(position - 1))
|
holder.bind(getItemAt(position))
|
||||||
} else {
|
} else {
|
||||||
super.onBindViewHolder(holder, position)
|
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
|
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) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
when (holder) {
|
when (holder) {
|
||||||
is SettingsViewHolder -> {
|
is SettingsViewHolder -> {
|
||||||
holder.bind(data[position])
|
holder.bind(getItemAt(position))
|
||||||
}
|
}
|
||||||
is FooterViewHolder -> {
|
is FooterViewHolder -> {
|
||||||
holder.bind(data[position].title)
|
holder.bind(getItemAt(position).title)
|
||||||
}
|
}
|
||||||
is SpacerViewHolder -> {
|
is SpacerViewHolder -> {
|
||||||
holder.bind(16.dpToPx(holder.itemView.context))
|
holder.bind(16.dpToPx(holder.itemView.context))
|
||||||
|
|
@ -42,7 +42,8 @@ class SettingsAdapter: BaseAdapter<SettingsItem>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
val item = data[position]
|
if (position == 0) return TYPE_HEADER
|
||||||
|
val item = getItemAt(position)
|
||||||
return when (item.type) {
|
return when (item.type) {
|
||||||
SettingsItem.Types.HEADER -> TYPE_HEADER
|
SettingsItem.Types.HEADER -> TYPE_HEADER
|
||||||
SettingsItem.Types.FOOTER -> 1
|
SettingsItem.Types.FOOTER -> 1
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ open class TaskListAdapter : BaseAdapter<Any>() {
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
if (holder is TaskViewHolder) {
|
if (holder is TaskViewHolder) {
|
||||||
val item = data[position - 1] as Task
|
val item = getItemAt(position) as Task
|
||||||
holder.bind(item)
|
holder.bind(item)
|
||||||
holder.onTaskScore = {
|
holder.onTaskScore = {
|
||||||
onTaskScore?.invoke(item)
|
onTaskScore?.invoke(item)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ class HabiticaRecyclerView @JvmOverloads constructor(
|
||||||
post {
|
post {
|
||||||
setPadding(0, (height * 0.1).toInt(), 0, (height * 0.25).toInt())
|
setPadding(0, (height * 0.1).toInt(), 0, (height * 0.25).toInt())
|
||||||
scrollToPosition(0)
|
scrollToPosition(0)
|
||||||
|
requestFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ class HabiticaScrollView @JvmOverloads constructor(
|
||||||
context: Context, attrs: AttributeSet? = null
|
context: Context, attrs: AttributeSet? = null
|
||||||
) : NestedScrollView(context, attrs) {
|
) : NestedScrollView(context, attrs) {
|
||||||
|
|
||||||
|
override fun onAttachedToWindow() {
|
||||||
|
super.onAttachedToWindow()
|
||||||
|
requestFocus()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
|
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
|
||||||
super.onLayout(changed, l, t, r, b)
|
super.onLayout(changed, l, t, r, b)
|
||||||
if (changed) {
|
if (changed) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue