Как обновить контекстное меню элемента списка в адаптере просмотра списка AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить контекстное меню элемента списка в адаптере просмотра списка Android

Сообщение Anonymous »

Мой текущий проект Android содержит список элементов, и с каждым элементом связано контекстное меню.
Один из параметров, доступных в контекстном меню, изменяет состояние элемента списка. и мне также требуется, чтобы элемент контекстного меню также изменился.
Я могу обновить сам элемент списка, чтобы отразить изменение статуса
однако я не могу заставить элемент контекстного меню измениться обнаружить, что соответствующий элемент данных был изменен
мой код похож на этот в адаптере элемента списка: -
override fun getChildView(
groupPosition: Int,
childPosition: Int,
isLastChild: Boolean,
view: View?,
parent: ViewGroup
): View {
var convertView = view

@Suppress("UNCHECKED_CAST")
val section = getGroup(groupPosition) as StickySection

val myData = getChild(groupPosition, childPosition) as MyData

val holder: ChildViewHolder

if (convertView !is MyDataItemUi) {
convertView = MyDataItemUi(parent.context)
holder = ChildViewHolder(convertView)
convertView.setTag(holder)
} else {
holder = convertView.getTag() as ChildViewHolder
}

val isBelongsToCluster = section.sectionInfo.id != NOT_CLUSTERED_MYDATAS_SECTION_ID

holder.view.build(
myData, // THIS IS WHERE THE DATA ITEM IS SET
onMyDataDeletedCallback,
onMyDataProgressCompletedClickCallback,
onAllocateMyDataOnCanvasCallback,
isBelongsToCluster,
myDataCustomButton
)
setupClickListener(holder.view)
setupGeneralMyDataView(holder.view, myData)

return holder.view
}

Я прокомментировал, где измененный элемент данных myData передается в код, создающий элемент списка, а также передается в контекстное меню
как обновить элемент данных контекстного меню, чтобы пользовательский интерфейс отражал измененные данные?
ОБНОВЛЕНИЕ
Если макет элемента списка указан в XML, контекстное меню реализовано с использованием Android Compose. DropDownMenu и элементы, связанные с XML через это представление создания: -


контекстное меню управляется (отображается/скрывается) следующим образом: -
val showDropDownMenuState = MutableStateFlow(false)

ui.ivMyDataCustomButton.setOnClickListener {
showDropDownMenuState.value = true
onHMyDataCustomButtonClick(myDataCustomButton, showDropDownMenuState)
}

И вот как я создаю выпадающее меню
private fun onMyDataContextMenuClick(showDropDownMenuState: MutableStateFlow) {
ui.cvMyDataCustomButtonDdm.apply {

setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
val showDropDownMenu by showDropDownMenuState.collectAsStateWithLifecycle()

MyDataItemSettingsDdm(
showDropDownMenu = showDropDownMenu,
myData = myData!!,
onMyDataAllocated = { myData?.let { onMyDataAllocatedCallback?.invoke(it) } },
onMyDataCompleted = {
myData?.let {
onMyDataProgressCompletedClickCallback?.onMyDataProgressCompleted(
it
)
}
},
onMyDataDeleted = {
if (!isReadOnly) {
val dialog = FDeleteItemUniversal()
.withTitle(context.getString(R.string.delete_myData_label))
.withMessage(context.getString(R.string.delete_myData))
dialog.setItemToDelete(myData)
onMyDataDeletedCallback?.let { dialog.setCallback(it) }
dialog.show(context.toAppActivity()?.supportFragmentManager)
} else {
context.err(R.string.myData_is_readonly)
}
},
onDismissRequest = {
showDropDownMenuState.value = false
}
)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ew-adapter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»