如何从另一个Activity内部的onActivityResult更改片段内部的视图?

问题描述 投票:0回答:1

这看起来像是一个重复的问题,但是我已经尝试了其他问题中给出的一些可能的解决方案,经过一段时间后,我认为最好重新编写一个。我正在使用Kotlin在Android上进行活动,该活动用于托管导航抽屉,并且在该活动中有一个带有一些按钮的片段,当我单击按钮时,会启动“扫描QrCodes”

CamaraQrIntegrator = IntentIntegrator(activity!!)
CamaraQrIntegrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
CamaraQrIntegrator.setPrompt("QrCodes")
CamaraQrIntegrator.setCameraId(0)
CamaraQrIntegrator.setBeepEnabled(false)
CamaraQrIntegrator.setOrientationLocked(false)
CamaraQrIntegrator.setBarcodeImageEnabled(false)
CamaraQrIntegrator.initiateScan()

因为ZXing要求我为IntentIntegrator使用父活动,所以onActivityResult是在Activity上,而不是我正在使用的Fragment

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
/// I Try to access a progressbar inside the framgent 
}

这使得它无法访问片段内的任何视图,当尝试使用FindViewById直接调用时,所有都返回null,在片段代码内创建函数以访问在onCreateView之后初始化的视图,当我尝试访问它告诉我进度栏为null的视图

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View? {
publicView = inflater.inflate(R.layout.fragment_principal, container, false)
 progressBar = publicView!!.findViewById(R.id.progressBarPrincipal)
return publicView
}
fun setProgressBarVisible(){
progressBar.visibility = View.VISIBLE
}
fun setProgressBarGone(){
progressBar.visibility = View.GONE
}

当我在活动上访问setProgressBarGone()时,它告诉我lateinit ProgressBar尚未初始化,尽管该片段尚未销毁,并且进度条确实是在OnCreateView上初始化的。

val MainFragment:Fragment = MainFragment()
val fragment = MainFragment().setProgressBarVisible()

我曾尝试将片段的视图公开,但仍返回null,我试图将Progressbar公开,但对于该活动它仍然为null,这不仅发生在onActivity Result在任何时候我尝试访问片段中的View返回null。

我不知道该怎么办,任何帮助都很好,请我真的很想从一开始就思考一下,因此,我非常感谢新的解决方案,而不是解决现有的问题。在这一点上,一切仍然对我有帮助。

android android-fragments kotlin view onactivityresult
1个回答
0
投票

[在创建该Fragment对象时以及使用crained insatnace的onActivityResult访问fragment方法上获取一个片段实例。

© www.soinside.com 2019 - 2024. All rights reserved.