Android Fragments 是否可以从片段创建共享Intent,以便在关闭选择器对话框时,它仍保留在调用片段中?

41ik7eoe  于 2023-01-02  发布在  Android
关注(0)|答案(1)|浏览(112)

是否可以从片段创建共享Intent,以便在关闭选择器对话框时,它仍保留在调用片段本身中,而不是父片段中?
我有一个MainFragment,它有一个包含许多片段的ViewPager。比如说FragmentA、FragmentB、FragmentC。下面是MainFragment的一些代码片段

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = super.onCreateView(inflater, container, savedInstanceState).also {
        setupPager()
       }

  private val fragmentList = arrayListOf<BaseFragment<*, *>>(
        FragmentA(),
        FragmentB(),
        FragmentC(),
     )

   private fun setupPager() {
        val adapter = SavvyViewPagerAdapter(
            fragmentList,
            childFragmentManager,
            lifecycle
        )
        binding.mainViewPager.adapter = adapter
        TabLayoutMediator(binding.pageIndicator, binding.mainViewPager) { tab, position ->
            fragmentList[position].titleRes?.let {
                tab.text = getString(it)
            }
        }.attach()
        binding.mainViewPager.setCurrentItem(
                fragmentList.indexOfFirst { it is FragmentB },
                false

在FragmentB中,有一些元素的回收视图。单击回收视图中的任何项时,它将导航到FragmentBDetail。此操作是从MainPagerToFragmentBDetail提供的。如果此操作是从FragmentB提供给FragmentBDetail的,则它将不起作用。
现在,在FragmentBDetail中,我正在创建一个共享Intent。

val sendIntent: Intent = Intent().apply {
            action = Intent.ACTION_SEND
            putExtra(Intent.EXTRA_TEXT, value)
            type = "text/plain"
        }

        val shareIntent = Intent.createChooser(sendIntent, null)
        startActivity(shareIntent)
    }

这将打开选择器对话框。但在关闭它时,它会返回到MainPagerFragment,并将FragmentB作为当前片段。在关闭对话框时,我希望它保留在FragmentBDetail中。如何实现此行为?
有人能帮忙吗?

4xrmg8kj

4xrmg8kj1#

我想如果你使用startActivityForResult()它会帮助你解决这个问题:

val sendIntent: Intent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, value)
        type = "text/plain"
    }

   val shareIntent = Intent.createChooser(sendIntent, null)
   startActivityForResult(shareIntent, SHARE_REQUEST_CODE)
   }

然后在练习FragmentBDetail中,您可以覆盖onActivityResult

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

  if (requestCode == SHARE_REQUEST_CODE) {
    // Handle the result of the share intent here
  }
}

现在,当选择器对话框关闭时,将在FragmentBDetail中调用onActivityResult(),并且您可以留在片段中。
你必须给予SHARE_REQUEST_CODE一个值。

相关问题