Android 导航组件和文件选择器
Android Navigation Component and File Chooser
我正在使用 Android 带有两个片段“片段 A”和“片段 B”的导航
在“片段 A”中我打开“片段 B”:
findNavController().navigate(R.id.action_fragmenta_to_fragmentb)
在“片段 B”中,我使用 startActivityForResult:
打开一个文件选择器
val openFileIntent = Intent(Intent.ACTION_OPEN_DOCUMENT)
openFileIntent.addCategory(Intent.CATEGORY_OPENABLE)
openFileIntent.type = "application/json"
val mimeTypes = arrayOf("application/octet-stream")
openFileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
startActivityForResult(
Intent.createChooser(
openFileIntent,
getString(R.string.load_from_file)), 909)
在“片段 B”中,选择文件后,我收到了预期的 onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//Do something with data from the file
}
我不明白的是,我现在看到的是“片段 A”,而不是停留在“片段 B”中。我是在做错什么,还是在将导航组件与 startActivityForResult 一起使用时出现问题?有没有人有办法让应用程序留在调用 startActivityForResult 的片段中?我很难找到有关将导航组件与在应用程序外部启动进程(即文件选择器、调用程序应用程序)的 Intents 集成的文档。
正如 Ians 对我的问题的评论所暗示的那样,我在主要 activity 中听取了一些事件,并在某些情况下以编程方式导航到“片段 A”。删除此导航后,应用程序在按我的预期选择文件后停留在“片段 B”中。
我正在使用 Android 带有两个片段“片段 A”和“片段 B”的导航
在“片段 A”中我打开“片段 B”:
findNavController().navigate(R.id.action_fragmenta_to_fragmentb)
在“片段 B”中,我使用 startActivityForResult:
打开一个文件选择器val openFileIntent = Intent(Intent.ACTION_OPEN_DOCUMENT)
openFileIntent.addCategory(Intent.CATEGORY_OPENABLE)
openFileIntent.type = "application/json"
val mimeTypes = arrayOf("application/octet-stream")
openFileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
startActivityForResult(
Intent.createChooser(
openFileIntent,
getString(R.string.load_from_file)), 909)
在“片段 B”中,选择文件后,我收到了预期的 onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//Do something with data from the file
}
我不明白的是,我现在看到的是“片段 A”,而不是停留在“片段 B”中。我是在做错什么,还是在将导航组件与 startActivityForResult 一起使用时出现问题?有没有人有办法让应用程序留在调用 startActivityForResult 的片段中?我很难找到有关将导航组件与在应用程序外部启动进程(即文件选择器、调用程序应用程序)的 Intents 集成的文档。
正如 Ians 对我的问题的评论所暗示的那样,我在主要 activity 中听取了一些事件,并在某些情况下以编程方式导航到“片段 A”。删除此导航后,应用程序在按我的预期选择文件后停留在“片段 B”中。