Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Android studio 如何随机导航到其他片段?_Android Studio_Kotlin_Android Fragments - Fatal编程技术网

Android studio 如何随机导航到其他片段?

Android studio 如何随机导航到其他片段?,android-studio,kotlin,android-fragments,Android Studio,Kotlin,Android Fragments,我有20个碎片。我想用一个按钮随机导航片段。它可以正常工作,但我不想重新访问相同的片段。如果我从片段5导航到片段9,我不想再重新导航到片段5。我只想看一次每一个片段。在我做的每一个片段中: btnNavigateNewFragment.setOnClickListener { val list: MutableList<Int> = mutableListOf( R.id.nav_new_game_eighteen, R

我有20个碎片。我想用一个按钮随机导航片段。它可以正常工作,但我不想重新访问相同的片段。如果我从片段5导航到片段9,我不想再重新导航到片段5。我只想看一次每一个片段。在我做的每一个片段中:

btnNavigateNewFragment.setOnClickListener {
val list: MutableList<Int> = mutableListOf(
                R.id.nav_new_game_eighteen,
                R.id.nav_dealgame,
                R.id.nav_new_game_one,
                R.id.nav_new_game_two,
                R.id.nav_new_game_three,
                R.id.nav_new_game_four,
                R.id.nav_new_game_five,
                R.id.nav_new_game_six,
                R.id.nav_new_game_seven,
                R.id.nav_new_game_eight,
                R.id.nav_new_game_nine,
                R.id.nav_new_game_ten,
                R.id.nav_new_game_eleven,
                R.id.nav_new_game_twelve,
                R.id.nav_new_game_thirteen,
                R.id.nav_new_game_fourteen,
                R.id.nav_new_game_fifteen,
                R.id.nav_new_game_sixteen,
                R.id.nav_new_game_seventeen
            )
val randomFragment= list.random()
findNavController().navigate(randomFragment)
btnNavigateNewFragment.setOnClickListener{
val list:MutableList=mutableListOf(
R.id.nav_新游戏_十八,
R.id.nav_游戏,
R.id.nav_新游戏_第一场,
R.id.nav新游戏第二场,
R.id.nav新游戏第三场,
R.id.nav新游戏第四场,
R.id.nav新游戏第五场,
R.id.nav新游戏第六场,
R.id.nav新游戏第七场,
R.id.nav新游戏第八场,
R.id.nav新游戏九,
R.id.nav新游戏,
R.id.nav_新游戏_11,
R.id.nav_新游戏_12,
R.id.nav_新游戏_十三,
R.id.nav_新游戏_十四,
R.id.nav_新游戏_十五,
R.id.nav_新游戏_十六,
R.id.nav_新游戏_17
)
val randomFragment=list.random()
findNavController().导航(随机片段)

我应该使用什么逻辑来不访问一次导航的片段?

我会在活动范围的ViewModel中跟踪已访问的片段。如果将其保留在片段或活动属性中,则如果配置发生更改,它将丢失

class MyViewModel: ViewModel() {
    private val destinations = listOf(
                R.id.nav_new_game_eighteen,
                R.id.nav_dealgame,
                R.id.nav_new_game_one,
                //...
                R.id.nav_new_game_seventeen
        )

    private val remainingDestinations = mutableListOf<Int>().apply { addAll(destinations) }

    fun getNextNavDestination(): Int {
        if (remainingDestinations.isEmpty()) {
            remainingDestinations.addAll(destinations)
            // or whatever logic you want to do when all destinations have been used
        }
        val destination = remainingDestinations.random()
        remainingDestinations.remove(destination)
        return destination
    }
}

从列表中删除拾取的片段,然后导航到该片段。
list.Remove(随机片段)
在活动范围的ViewModel中,保留一组可变的访问片段,并在选择随机值之前将其从该列表中删除。@GurgenArustamyan感谢您的评论。如果我当前在片段3中,我是否应该从列表中删除片段3的id?但仍然可以在其他片段中导航回片段3。Sho我是否可以将该列表保存到共享首选项中?您可以在“活动”中定义列表,并且它对于所有片段都是相同的,或者在“共享视图模型”中定义它,或者是,您可以将其保存到“共享首选项”中。但我认为最好的选择是在“活动”中定义它activity@Tenfour04谢谢你的评论。你能给我举个例子吗?
class MyFragment: Fragment() {
    private val myViewModel by activityViewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle) {
        super.onViewCreated(view, savedInstanceState)
        //...

        btnNavigateNewFragment.setOnClickListener {
            indNavController().navigate(myViewModel.getNextNavDestination())
        }
    }
}