Git Product home page Git Product logo

Comments (6)

bananaCaptain avatar bananaCaptain commented on May 27, 2024

出现了一样的报错,需求是在启动一个activity时 动态判断 设置 setStartDestination(),如果在oncreate就报上面的错,如果是onstart()就同过,个人理解是初始化未完成就开始清理栈。问题是之前的项目没有出现。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// val binding = ActivityMainBinding.inflate(layoutInflater)
// setContentView(binding.root)
setContentView(R.layout.activity_main)
initNavGraph()
}

override fun onStart() {
    super.onStart()
    initNavGraph()
}


private fun initNavGraph() {
    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_main) as NavHostFragment
    navHostFragment.navController
    val navController = navHostFragment.navController
    val navMainGraph = navController.navInflater.inflate(R.navigation.nav_main)
    //TODO 数据不应该直接出现在UI,这个模式数据应该放在 ShareViewModel 中 区局多次使用
    //判断是否已经选择了指定对讲模式,如果没有选择就显示选择对讲模式页,如果已经存在,直接进入对应的对讲主页
    val selectcallModeInt = AppConfigs.selectCallModeKVI.get()
    val startDestinationId = if (selectcallModeInt == -1) {
        R.id.selectModeFragment
    } else {

// R.id.homeFragment
R.id.selectModeFragment
}
navMainGraph.setStartDestination(startDestinationId)
navController.graph = navMainGraph

}

from smooth-navigation.

wsdydeni avatar wsdydeni commented on May 27, 2024

出现了一样的报错,需求是在启动一个activity时 动态判断 设置 setStartDestination(),如果在oncreate就报上面的错,如果是onstart()就同过,个人理解是初始化未完成就开始清理栈。问题是之前的项目没有出现。

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // val binding = ActivityMainBinding.inflate(layoutInflater) // setContentView(binding.root) setContentView(R.layout.activity_main) initNavGraph() }

override fun onStart() {
    super.onStart()
    initNavGraph()
}


private fun initNavGraph() {
    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_main) as NavHostFragment
    navHostFragment.navController
    val navController = navHostFragment.navController
    val navMainGraph = navController.navInflater.inflate(R.navigation.nav_main)
    //TODO 数据不应该直接出现在UI,这个模式数据应该放在 ShareViewModel 中 区局多次使用
    //判断是否已经选择了指定对讲模式,如果没有选择就显示选择对讲模式页,如果已经存在,直接进入对应的对讲主页
    val selectcallModeInt = AppConfigs.selectCallModeKVI.get()
    val startDestinationId = if (selectcallModeInt == -1) {
        R.id.selectModeFragment
    } else {

// R.id.homeFragment R.id.selectModeFragment } navMainGraph.setStartDestination(startDestinationId) navController.graph = navMainGraph

}

兄弟 你需要换种写法来获取NavController

from smooth-navigation.

bananaCaptain avatar bananaCaptain commented on May 27, 2024

出现了一样的报错,需求是在启动一个activity时 动态判断 设置 setStartDestination(),如果在oncreate就报上面的错,如果是onstart()就同过,个人理解是初始化未完成就开始清理栈。问题是之前的项目没有出现。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // val binding = ActivityMainBinding.inflate(layoutInflater) // setContentView(binding.root) setContentView(R.layout.activity_main) initNavGraph() }

override fun onStart() {
    super.onStart()
    initNavGraph()
}


private fun initNavGraph() {
    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_main) as NavHostFragment
    navHostFragment.navController
    val navController = navHostFragment.navController
    val navMainGraph = navController.navInflater.inflate(R.navigation.nav_main)
    //TODO 数据不应该直接出现在UI,这个模式数据应该放在 ShareViewModel 中 区局多次使用
    //判断是否已经选择了指定对讲模式,如果没有选择就显示选择对讲模式页,如果已经存在,直接进入对应的对讲主页
    val selectcallModeInt = AppConfigs.selectCallModeKVI.get()
    val startDestinationId = if (selectcallModeInt == -1) {
        R.id.selectModeFragment
    } else {

// R.id.homeFragment R.id.selectModeFragment } navMainGraph.setStartDestination(startDestinationId) navController.graph = navMainGraph

}

兄弟 你需要换种写法来获取NavController

具体怎么写?麻烦了

from smooth-navigation.

bananaCaptain avatar bananaCaptain commented on May 27, 2024

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycleScope.launch {
//如果不加延迟就报错,加了就正常了
//java.lang.UnsupportedOperationException
// at java.util.AbstractList.remove(AbstractList.java:161)
// at androidx.navigation.fragment.FragmentNavigator.popBackStack(FragmentNavigator.java:109)
// delay(2)
initNavGraph()
}
}

private fun initNavGraph() {
    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_main) as NavHostFragment
    val navController = navHostFragment.navController
    val navMainGraph = navController.navInflater.inflate(R.navigation.nav_main)
    navMainGraph.setStartDestination(R.id.homeFragment)
    navController.graph = navMainGraph
}

}
延迟 1微秒就不报错了

from smooth-navigation.

bananaCaptain avatar bananaCaptain commented on May 27, 2024

换了Navigation.findNavController 也是一样,延迟1毫秒就不报错,不延迟就报错,不知道有正解不?麻烦了
private fun initNavGraph2() {
val navController = Navigation.findNavController(this, R.id.nav_host_main)
val navMainGraph = navController.navInflater.inflate(R.navigation.nav_main)
navMainGraph.setStartDestination(R.id.homeFragment)
navController.graph = navMainGraph
}

from smooth-navigation.

wsdydeni avatar wsdydeni commented on May 27, 2024

给你翻了下代码

        val navHostFragment = supportFragmentManager
            .findFragmentById(R.id.nav_host_fragment_bankcard) as NavHostFragment
        val navController = NavHostFragment.findNavController(navHostFragment)
        val bankCardCount = intent?.getIntExtra("bankCardCount",0)
        navController.setGraph(
            if(bankCardCount == 0) R.navigation.nav_bankcard_add
            else R.navigation.nav_bankcard,
            // 没有银行卡时,添加银行卡界面直接退出
            if(bankCardCount == 0) Bundle().apply { putBoolean("isReturnList",false) }
            else null
        )
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_host_fragment_bankcard"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    />

from smooth-navigation.

Related Issues (19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.