Как я могу получить имя предыдущего фрагмента в архитектуре навигации Android?

#android #kotlin #android-fragments

#Android #kotlin #android-фрагменты

Вопрос:

Это мой фрагмент:

 class InvoicesSettingsFragment : Fragment() {

    private lateinit var _navigationHost: NavController

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_invoices_settings, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        _navigationHost = requireView().findNavController()
    }
    
}
  

Я хотел бы записать предыдущее имя фрагмента в текущем фрагменте. Как я могу получить имя предыдущего фрагмента? Я перепробовал все свойства, определенные в NavController ( _navigationHost ), но безуспешно. Единственная другая возможность, которую я имею в виду, это передать его имя в качестве аргумента во время навигации.

Ответ №1:

Что вы подразумеваете под именем фрагмента?

Если вам нужна метка fragmnet в nav_graph , вы можете получить backStack свойство NavController

 val backStack = findNavController().backStack.toList()
if (bacStack.size > 1) {
   val prevDest = backStack[backStack.size - 2]
   prevDest.destination.label // the label of the previous fragment
}
  

Комментарии:

1. Я полагаю, что свойство backStack больше не существует в NavController. Вместо этого вы можете использовать findNavController().Обратная очередь.