Android 在片段之间传递值
我正在Kotlin中制作一个Android应用程序(如果有必要,我会尽可能遵循MVVM),我的应用程序结构如下: 1活动(MainActivity),其中包含一个FrameLayout和一个BottomNavigationView 每单击一次BottomNavigationView,FrameLayout都会动态填充片段。一个片段然后单击打开另一个片段。后一个片段的结构如下: 1个导航视图(导航问题)和1个框架布局(框架问题) FrameLayout应根据NavigationView的单击更改片段 那些包含片段的包含一个textview和一个listview。 我已经实现了上述所有功能,没有出现很多问题 当我需要在最后一个子片段和其父片段之间向后通信时,会出现问题,因为我需要根据已单击的listview中的项,更改打开该片段的navigationview文本的颜色,并更改该listview条目的颜色。我尝试调用parentFragment,但无法访问它的变量,尝试使用bundle,但它们似乎总是空的,等等 此外,当我使用navigationview切换到另一个片段时,我似乎无法保持最后一个片段所处的状态。 我正在改变这样的片段:Android 在片段之间传递值,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,我正在Kotlin中制作一个Android应用程序(如果有必要,我会尽可能遵循MVVM),我的应用程序结构如下: 1活动(MainActivity),其中包含一个FrameLayout和一个BottomNavigationView 每单击一次BottomNavigationView,FrameLayout都会动态填充片段。一个片段然后单击打开另一个片段。后一个片段的结构如下: 1个导航视图(导航问题)和1个框架布局(框架问题) FrameLayout应根据NavigationView的单击更改片
navigationQuestions.setNavigationItemSelectedListener {
val transaction = this.activity?.supportFragmentManager!!.beginTransaction()
val index : Int = it.title.toString().toInt()-1
transaction.replace(R.id.frameQuestion, fragmentQuestions[index])
transaction.commit()
return@setNavigationItemSelectedListener true
}
fragmentQuestions是我在课程开始时创建的可变列表,在填充navigationView时填充。我这样做的原因是,每次我按下navigationView,都会创建该片段的一个新实例,这并不是我真正想要的,所以这就解决了它
我尝试过用各种覆盖组合保存片段的状态,包括onPause()、onInstanceSaved、onviewdemployed()等,但我的包始终保持空
因此,问题是,是否有一种有效的方法,在listView单击时,为属于父片段的navigationView条目上色,并保存当前片段,以便在切换到另一个navigationView片段并返回时,它仍保持原样
我在所有片段类中都使用onCreateView,这是listview onitemclicklistener:
answersList.setOnItemClickListener { parent, view, position, id ->
if(position == question.correct-1) {
(view as TextView).setTextColor(resources.getColor(R.color.greenanswer, null))
parent.isEnabled = false
}
else {
(view as TextView).setTextColor(resources.getColor(R.color.redanswer, null))
parent.isEnabled = false
}
}
我已尝试使用以下内容访问navigationview
(parent.parent.parent.parent as ViewGroup).get(0)
但我很快意识到我无法通过这种方式访问它:(
navigationview和framelayout的外观为:
有什么帮助和提示吗?我可以提供任何必要部分的更详细的代码,我不想用不需要的代码压倒问题,因为代码太多了
提前感谢:)您可以通过调用
setFragmentResult(
REQUEST_KEY_FRAGMENT,
bundleOf(EXTRA_DATA to "but your data here")
)
在父活动中,你应该听取以下结果:
setFragmentResultListener(REQUEST_KEY_FRAGMENT) { key, bundle ->
bundle.getString(EXTRA_DATA)?.let {
}
}
您的项目中应该有此依赖项:
implementation "androidx.fragment:fragment-ktx:1.3.0-beta01"