Мой текущий проект 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
Как обновить контекстное меню элемента списка в адаптере просмотра списка Android ⇐ Android
Форум для тех, кто программирует под Android
1736325214
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 передается в код, создающий элемент списка, а также передается в контекстное меню
как обновить элемент данных контекстного меню, чтобы пользовательский интерфейс отражал измененные данные?
[b]ОБНОВЛЕНИЕ[/b]
Если макет элемента списка указан в 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
}
)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79336567/how-to-refresh-list-item-context-menu-in-android-list-view-adapter[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия