Я хочу открыть свой класс диалогового фрагмента из фрагмента и хочу вернуть данные из фрагмента диалога. Я студент университета, и у меня был пример приложения, в котором это было сделано из основного действия с реализацией обратного вызова, но когда я пытаюсь открыть диалог из фрагмента, он все равно направляет его к основному действию, а не к фрагменту, из которого я его открыл. Могу ли я сделать это с помощью реализации обратного вызова или мне нужно сделать что-то еще?
У меня есть код из примера проекта, который работает, когда он запускается из основного действия. Я поискал это в Интернете и обнаружил, что это можно сделать и с аргументами навигации, но хотел бы сделать это, если это возможно. Если нет, я был бы признателен, что мне нужно изменить в аргументах навигации, потому что я этого не совсем понял.
class MenuFragment : Fragment(), PlanAdapter.PlanItemClickListener, PlanItemDialogFragment.NewPlanItemDialogListener {
private lateinit var binding : FragmentMenuBinding
private lateinit var database: PlanListDatabase
private lateinit var adapter: PlanAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentMenuBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
database = PlanListDatabase.getDatabase(requireActivity().applicationContext)
binding.fab.setOnClickListener{
PlanItemDialogFragment().show(
childFragmentManager,
PlanItemDialogFragment.TAG
)
}
}
class PlanItemDialogFragment : DialogFragment() {
interface NewPlanItemDialogListener {
fun onPlanItemCreated(newItem: PlanItem)
}
private lateinit var listener: NewPlanItemDialogListener
private lateinit var binding: DialogNewItemBinding
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as? NewPlanItemDialogListener
?: throw RuntimeException("Activity must implement the NewPlanItemDialogListener interface!")
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
binding = DialogNewItemBinding.inflate(LayoutInflater.from(context))
return AlertDialog.Builder(requireContext())
.setTitle(hu.bme.aut.android.mobil_hf.R.string.new_plan_item)
.setView(binding.root)
.setPositiveButton(hu.bme.aut.android.mobil_hf.R.string.button_ok) { dialogInterface, i ->
if (isValid()) {
listener.onPlanItemCreated(getPlanItem())
}
}
.setNegativeButton(hu.bme.aut.android.mobil_hf.R.string.button_cancel, null)
.create()
}
Подробнее здесь: https://stackoverflow.com/questions/773 ... h-callback
Как открыть DialogFragment из фрагмента с обратным вызовом? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1719257888
Anonymous
Я хочу открыть свой класс диалогового фрагмента из фрагмента и хочу вернуть данные из фрагмента диалога. Я студент университета, и у меня был пример приложения, в котором это было сделано из основного действия с реализацией обратного вызова, но когда я пытаюсь открыть диалог из фрагмента, он все равно направляет его к основному действию, а не к фрагменту, из которого я его открыл. Могу ли я сделать это с помощью реализации обратного вызова или мне нужно сделать что-то еще?
У меня есть код из примера проекта, который работает, когда он запускается из основного действия. Я поискал это в Интернете и обнаружил, что это можно сделать и с аргументами навигации, но хотел бы сделать это, если это возможно. Если нет, я был бы признателен, что мне нужно изменить в аргументах навигации, потому что я этого не совсем понял.
class MenuFragment : Fragment(), PlanAdapter.PlanItemClickListener, PlanItemDialogFragment.NewPlanItemDialogListener {
private lateinit var binding : FragmentMenuBinding
private lateinit var database: PlanListDatabase
private lateinit var adapter: PlanAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentMenuBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
database = PlanListDatabase.getDatabase(requireActivity().applicationContext)
binding.fab.setOnClickListener{
PlanItemDialogFragment().show(
childFragmentManager,
PlanItemDialogFragment.TAG
)
}
}
class PlanItemDialogFragment : DialogFragment() {
interface NewPlanItemDialogListener {
fun onPlanItemCreated(newItem: PlanItem)
}
private lateinit var listener: NewPlanItemDialogListener
private lateinit var binding: DialogNewItemBinding
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as? NewPlanItemDialogListener
?: throw RuntimeException("Activity must implement the NewPlanItemDialogListener interface!")
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
binding = DialogNewItemBinding.inflate(LayoutInflater.from(context))
return AlertDialog.Builder(requireContext())
.setTitle(hu.bme.aut.android.mobil_hf.R.string.new_plan_item)
.setView(binding.root)
.setPositiveButton(hu.bme.aut.android.mobil_hf.R.string.button_ok) { dialogInterface, i ->
if (isValid()) {
listener.onPlanItemCreated(getPlanItem())
}
}
.setNegativeButton(hu.bme.aut.android.mobil_hf.R.string.button_cancel, null)
.create()
}
Подробнее здесь: [url]https://stackoverflow.com/questions/77389975/how-to-open-dialogfragment-from-fragment-with-callback[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия