当前位置: 首页 > 知识库问答 >
问题:

不推荐使用OnActivityResult方法,如何从菜单的onOptionItemselected中使用registerForActivityResult

郁高韵
2023-03-14

我在利用科特林。我试图选择一个文件夹来创建一个文件,并将数据从我的数据库导出到该文件中。但现在它告诉我,startActivityForResult是不推荐的

我读过这样一个问题:OnActivityResult方法是不推荐的,还有什么替代方案?但遗憾的是,我不知道如何在Optionsmenu中实现这一点,以打开Action_Create_Document进行数据导出。

作为一个非母语者,我也很难理解基本训练:https://developer.android.com/training/basics/intents/result。
所以我的问题是:如何实现一个调用来选择一个位置并创建一个TXT文件,然后使用registerForActivityResult用文本填充该文件,而不移动到另一个活动/保持您所在的活动。

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.Export -> {
            val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)

            intent.addCategory(Intent.CATEGORY_OPENABLE)
            intent.type = "text/plain"
            intent.putExtra(Intent.EXTRA_TITLE, "Spells.txt")

            startActivityForResult(intent, 112)
            return true
        }
        else -> super.onOptionsItemSelected(item)
    }
}

    override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
    super.onActivityResult(requestCode, resultCode, resultData)
    if (requestCode == 112 && resultCode == RESULT_OK) {
        Toast.makeText(this, "Created", Toast.LENGTH_LONG).show()
        val path = resultData?.data?.path
        val myfile: File
        if (path != null) {
            myfile = File(path)
            ....
            doing stuff()
        }
    }
}

共有1个答案

万开畅
2023-03-14

这里有一些关于如何使用新的registerForActivityResult方法的代码,在本例中,它替换了intent.action_create_document意图。

 class YourActivity {
       // This is the launcher ...
       // CreateDocument() -> Intent.ACTION_CREATE_DOCUMENT
  
       private val getCreateFileUriContent = registerForActivityResult(ActivityResultContracts.CreateDocument()) { uri: Uri? ->
            // Handle the returned Uri
            uri?.let { onCreateFileSelected(it) }
            
            
      override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)        
            //....
            
             someButton.setOnClickListener {
                //launch for results
                getCreateFileUriContent.launch("test.json")
            }
      }     
            
    }
 类似资料:
  • 因此,我使用一个gps类来打开gps,这里有一个方法允许我们发送到,但是由于在AndroidX上不推荐,并且仍然可用,android团队建议我们下一个方法: 我如何使用新API来处理同样的事情?

  • 我在google上搜索onactivityresult()是不推荐的。但我的问题没有解决。下面是片段的代码

  • 我最近发现是不推荐的。我们该怎么处理? 有什么替代方案吗?

  • 问题内容: 我已经看到了许多在API上使用注释以将其标记为“需要尽快替换”的示例。 但是,在几乎所有这些情况下,代码开发人员不仅继续使用已弃用的API,而且还抑制了弃用警告。 似乎API开发人员的最佳意图最终是创建更多与已实现的业务逻辑无关的代码- 如果不赞成使用API​​,但在抑制相关警告的情况下继续使用它,则似乎充其量只是代码的降级,并且在IMHO最差的情况下替换不推荐使用的库时,可能会导致应

  • 我使用hystrix api版本1.5.4。我看到的方法已被弃用。替代方法是什么?

  • 问题内容: 我在java 6上。用于读取用户输入。不推荐使用readLine()的情况。读取用户价值的方法是什么? 请在不建议使用readLine()时进行解释。 问题答案: 从根本上说是二进制结构。如果要读取 文本 数据(例如从控制台),则应使用某种描述。要将转换为,请使用。然后在周围创建一个,您可以使用读取一行。 更多选择: 使用内置回合,然后致电 使用(从中获得)并致电