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 在片段之间传递值_Android_Kotlin_Android Fragments - Fatal编程技术网

Android 在片段之间传递值

Android 在片段之间传递值,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,我正在Kotlin中制作一个Android应用程序(如果有必要,我会尽可能遵循MVVM),我的应用程序结构如下: 1活动(MainActivity),其中包含一个FrameLayout和一个BottomNavigationView 每单击一次BottomNavigationView,FrameLayout都会动态填充片段。一个片段然后单击打开另一个片段。后一个片段的结构如下: 1个导航视图(导航问题)和1个框架布局(框架问题) FrameLayout应根据NavigationView的单击更改片

我正在Kotlin中制作一个Android应用程序(如果有必要,我会尽可能遵循MVVM),我的应用程序结构如下:

1活动(MainActivity),其中包含一个FrameLayout和一个BottomNavigationView

每单击一次BottomNavigationView,FrameLayout都会动态填充片段。一个片段然后单击打开另一个片段。后一个片段的结构如下:

1个导航视图(导航问题)和1个框架布局(框架问题)

FrameLayout应根据NavigationView的单击更改片段

那些包含片段的包含一个textview和一个listview。 我已经实现了上述所有功能,没有出现很多问题

当我需要在最后一个子片段和其父片段之间向后通信时,会出现问题,因为我需要根据已单击的listview中的项,更改打开该片段的navigationview文本的颜色,并更改该listview条目的颜色。我尝试调用parentFragment,但无法访问它的变量,尝试使用bundle,但它们似乎总是空的,等等

此外,当我使用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"