В чем разница между использованием FragmentTransaction и findNavController (). Navigate ()? - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в Android Studio и Kotlin, поэтому извиняюсь, если я что-то не понимаю.

Я не знаю, как именно это работает в Android Studio, но я знаю, что можно использовать как findNavController().navigate(), так и FragmentTransaction, чтобы открыть новое представление, но я не могу понять разница между ними, хотя они оба, кажется, выполняют схожую функцию.

Также я пытался использовать FragmentTransaction , чтобы открыть представление, а затем из этого нового представления, которое я использовал перейти , чтобы открыть другой, но по какой-то причине приложение вылетело, когда я попытался выполнить метод navigate () .

Может ли кто-нибудь более осведомленный дать мне немного больше информации о том, что делать эти оба метода делают? Спасибо.

Кроме того, здесь я предоставляю несколько примеров кода, которые я использовал как для навигации, так и для FragmentTransaction.

navigate ()

override fun onOptionsItemSelected(item: MenuItem?): Boolean
{
    var id = getResID(item?.itemId)
    if (id != -1)
    {
        findNavController(R.id.nav_host_fragment).navigate(id, null)
    }
    return super.onOptionsItemSelected(item)
}
private fun getResID(itemID: Int?) : Int
{
    var id = -1
    when (itemID)
    {
        R.id.Settings   -> id = R.id.from_home_to_settings
        R.id.Home       -> id = R.id.from_settings_to_home
    }
    return id
}

FragmentTransaction

override fun onOptionsItemSelected(item: MenuItem?): Boolean
{
    val trans = manager.beginTransaction()
    val fragment = getFragmentByID(item?.itemId)

    trans.replace(R.id.nav_host_fragment, fragment)
    trans.addToBackStack(null)

    trans.commit()

    return super.onOptionsItemSelected(item)
}

private fun getFragmentByID(itemID: Int?) : Fragment
{
    when (itemID)
    {
        R.id.Settings   -> return SettingsFragment()
        R.id.Home       -> return HomeFragment()
    }
    return HomeFragment()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...