如何在不是MainActivity的活动中选择文件夹

时间:2018-10-30 03:35:02

标签: android

我在一个应用程序中有两个Activity,MainActivity和SecondActivity。

我想在SecondActivity中使用ACTION_OPEN_DOCUMENT_TREE操作来选择一个文件夹,但是我从未成功。

本机文件夹选择器会将结果返回给MainActivity,并且永远不会触发两个活动的onActivityResult。只有在MainActivity中使用ACTION_OPEN_DOCUMENT_TREE操作时,我的需求才会成功。

以下代码是我的示例

<-- Manifest.xml -->
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SecondActivity"
        android:label="@string/title_activity_second"
        android:theme="@style/AppTheme.NoActionBar"></activity>
</application>

// MainActivity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    fab.setOnClickListener { view ->
        val intent = Intent(this, SecondActivity::class.java)
        intent.flags += Intent.FLAG_ACTIVITY_NO_HISTORY
        startActivity(intent)
    }
}

// SecondActivity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_second)
    setSupportActionBar(toolbar)

    fab.setOnClickListener { view ->
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)

        startActivityForResult(intent, SecondActivity.REQ_CODE)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data) // Never run to here

    if (requestCode == SecondActivity.REQ_CODE && resultCode == RESULT_OK) {
        val selectedFile = data?.data 
    }
}

所以我的问题是,如何将选择器的返回目标分配给SecondActivity而不是MainActivity?

1 个答案:

答案 0 :(得分:1)

根据Intent.FLAG_ACTIVITY_NO_HISTORY,如果设置了onActivityResult,则不会调用它,这说明了为什么它随后返回您的MainActivity。删除该标记将解决此问题,但是如果您打算保留它,则需要找到另一个解决方法。

  

如果设置,则新活动不保留在历史记录堆栈中。立刻   用户离开它,活动结束。这可能   也可以使用noHistory属性设置。

     

如果设置,则在当前活动时永不调用onActivityResult()   开始一项新的活动,设定结果并完成。