Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin android底部导航片段setRetainInstance(真)_Android_Kotlin_Fragment_Refresh - Fatal编程技术网

kotlin android底部导航片段setRetainInstance(真)

kotlin android底部导航片段setRetainInstance(真),android,kotlin,fragment,refresh,Android,Kotlin,Fragment,Refresh,我创建了一个包含4个片段的底部导航项目,并将setHasOptions菜单(true)放在qponFragment的onCreate()中,以便在切换片段后保留qponFragment的相同内容。但是,它不起作用,qponFragment在从其他片段切换回来后仍会刷新。请帮助修复它,并找出我的代码有什么问题 这里是MainActivity.kt的代码 class MainActivity : AppCompatActivity() { private var mFirebaseAnal

我创建了一个包含4个片段的底部导航项目,并将setHasOptions菜单(true)放在qponFragment的onCreate()中,以便在切换片段后保留qponFragment的相同内容。但是,它不起作用,qponFragment在从其他片段切换回来后仍会刷新。请帮助修复它,并找出我的代码有什么问题

这里是MainActivity.kt的代码

class MainActivity : AppCompatActivity() {

    private var mFirebaseAnalytics: FirebaseAnalytics? = null

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_qpon -> {
                //message.setText(R.string.title_qpon)
                actionBarIcon(R.drawable.ic_title_black)
                createQponFragment()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_me-> {
                //message.setText(R.string.title_me)
                actionBarIcon(R.drawable.logged)
                createMeFragment()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_tool -> {
                //message.setText(R.string.title_tool)
                actionBarIcon(R.drawable.logged)
                createToolFragment()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_tutorial -> {
                //message.setText(R.string.title_tutorial)
                actionBarIcon(R.drawable.tutorial)
                createTutorialFragment()
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Obtain the FirebaseAnalytics instance.
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)

        actionBarIcon(R.drawable.ic_title_black)


        createQponFragment()
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }

    fun actionBarIcon(imageName:Int) {

        setSupportActionBar(findViewById(R.id.my_toolbar))
        my_toolbar.setLogo(imageName)

        if (imageName == R.drawable.ic_title_black) {
            my_toolbar.setTitle("")
        }

        if (imageName == R.drawable.logged) {

            my_toolbar.setTitle("login name")

        }
        if (imageName == R.drawable.tutorial) {

            my_toolbar.setTitle("Tutorial")

        }


    }

    val manager = supportFragmentManager

    fun createQponFragment() {
        val transaction = manager.beginTransaction()
        val fragment = qponFragment()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }

    fun createMeFragment() {
        val transaction = manager.beginTransaction()
        val fragment = meFragment()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }

    fun createToolFragment() {
        val transaction = manager.beginTransaction()
        val fragment = toolFragment()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }

    fun createTutorialFragment() {
        val transaction = manager.beginTransaction()
        val fragment = tutorialFragment()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }
}
下面是qponFragment.kt的代码

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setRetainInstance(true)
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {

    setHasOptionsMenu(true)

    return inflater.inflate(R.layout.fragment_qpon, container, false)

}

如果您试图在每次不创建新实例的情况下保留片段实例,它应该可以工作。请找到密码

class MainActivity : AppCompatActivity() {

private var mFirebaseAnalytics: FirebaseAnalytics? = null

private var meFragment:Fragment? = null
var toolFragment :Fragment? =null
var qponFragment:Fragment? =null
var tutorialFragment:Fragment? = null
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_qpon -> {
            //message.setText(R.string.title_qpon)
            actionBarIcon(R.drawable.ic_title_black)
            createQponFragment()
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_me-> {
            //message.setText(R.string.title_me)
            actionBarIcon(R.drawable.logged)
            createMeFragment()
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_tool -> {
            //message.setText(R.string.title_tool)
            actionBarIcon(R.drawable.logged)
            createToolFragment()
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_tutorial -> {
            //message.setText(R.string.title_tutorial)
            actionBarIcon(R.drawable.tutorial)
            createTutorialFragment()
            return@OnNavigationItemSelectedListener true
        }
    }
    false
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Obtain the FirebaseAnalytics instance.
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)

    actionBarIcon(R.drawable.ic_title_black)


    createQponFragment()
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}

fun actionBarIcon(imageName:Int) {

    setSupportActionBar(findViewById(R.id.my_toolbar))
    my_toolbar.setLogo(imageName)

    if (imageName == R.drawable.ic_title_black) {
        my_toolbar.setTitle("")
    }

    if (imageName == R.drawable.logged) {

        my_toolbar.setTitle("login name")

    }
    if (imageName == R.drawable.tutorial) {

        my_toolbar.setTitle("Tutorial")

    }


}

val manager = supportFragmentManager

fun createQponFragment() {
    val transaction = manager.beginTransaction()
    if(qponFragment == null) qponFragment = qponFragment()   // *****code changed here***********
    transaction.replace(R.id.fragmentholder,qponFragment)
    transaction.addToBackStack(null)
    transaction.commit()
}

fun createMeFragment() {
    val transaction = manager.beginTransaction()
    if(meFragment == null) meFragment = meFragment()      
    transaction.replace(R.id.fragmentholder,meFragment)
    transaction.addToBackStack(null)
    transaction.commit()
}

fun createToolFragment() {
    val transaction = manager.beginTransaction()
    if(toolFragment == null) toolFragment = toolFragment() 
    transaction.replace(R.id.fragmentholder,toolFragment)
    transaction.addToBackStack(null)
    transaction.commit()
}

fun createTutorialFragment() {
    val transaction = manager.beginTransaction()
    val fragment = tutorialFragment()
    if(tutorialFragment == null) toolFragment = tutorialFragment()   // *****code changed here***********
    transaction.replace(R.id.fragmentholder,tutorialFragment)
    transaction.replace(R.id.fragmentholder,fragment)
    transaction.addToBackStack(null)
    transaction.commit()
   }
}
它显示错误:


为什么它是一个保留片段?我在qponFragment中仍然有2个spinner和一个recyclerview,但我没有把所有代码都放在这个问题上。我只希望当用户从其他片段切换回来时,Qpon片段不会刷新。你现在明白我的问题了吗?为什么不使用?我不知道如何使用它,我是新来的。我遵循一个教程,告诉我如何使用android studio的默认底部导航。