Android studio 如何随机导航到其他片段?
我有20个碎片。我想用一个按钮随机导航片段。它可以正常工作,但我不想重新访问相同的片段。如果我从片段5导航到片段9,我不想再重新导航到片段5。我只想看一次每一个片段。在我做的每一个片段中: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
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())
}
}
}