android 如何在另一个片段中使用viewpager而不产生任何生命周期问题?

mf98qq94  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(160)

这是我使用viewpager的配置文件片段:

  1. @Suppress("DEPRECATION")
  2. class ProfileFragment : Fragment() {
  3. private lateinit var viewPagerAdaptor: ViewPagerAdaptor
  4. private val binding: FragmentProfileBinding by lazy {
  5. FragmentProfileBinding.inflate(layoutInflater)
  6. }
  7. private lateinit var currentUserId: String
  8. override fun onCreateView(
  9. inflater: LayoutInflater, container: ViewGroup?,
  10. savedInstanceState: Bundle?
  11. ): View {
  12. // User id
  13. currentUserId = FirebaseAuth.getInstance().currentUser!!.uid
  14. // Edit profile button
  15. binding.editProfileButton.setOnClickListener{
  16. startActivity(
  17. Intent(requireActivity(), EditProfileActivity::class.java)
  18. .putExtra("userId", currentUserId)
  19. .addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
  20. )
  21. }
  22. // add post button
  23. binding.addPostButton.setOnClickListener{
  24. startActivity(Intent(requireActivity(), AddPostActivity::class.java))
  25. }
  26. // Settings Button
  27. binding.settingsButton.setOnClickListener {
  28. startActivity(Intent(requireActivity(), SettingsActivity::class.java))
  29. }
  30. return binding.root
  31. }
  32. @SuppressLint("SetTextI18n")
  33. private fun init() {
  34. // Setup tabs
  35. setUpTabs()
  36. }
  37. /*
  38. * set up tab layout : My posts | My Incubates | My Bookmarks
  39. * */
  40. private fun setUpTabs() {
  41. viewPagerAdaptor = ViewPagerAdaptor(requireActivity().supportFragmentManager)
  42. viewPagerAdaptor.addFragments(MyPostFragment())
  43. viewPagerAdaptor.addFragments(MyIncubatesFragment())
  44. viewPagerAdaptor.addFragments(MyBookmarksFragment())
  45. binding.profileViewPager.adapter = viewPagerAdaptor
  46. binding.profileTabLayout.setupWithViewPager(binding.profileViewPager)
  47. binding.profileTabLayout.getTabAt(0)!!.setIcon(R.drawable.grid_view)
  48. binding.profileTabLayout.getTabAt(1)!!.setIcon(R.drawable.video_play_outlined)
  49. binding.profileTabLayout.getTabAt(2)!!.setIcon(R.drawable.bookmark)
  50. }
  51. }

字符串
这个实现存在生命周期问题,片段中的viewpager在我上面的实现中不能正常工作。
当从另一个Activity移动到this或onBackPressed时,我希望profile片段回到以前的状态。
请帮我解决这个问题。(以下是堆栈跟踪)

  1. 2023-12-11 10:26:46.327 1311-18277 AwareLog system_server W AwareMem_Reclaim: generateCompressList procsGroups error!
  2. 2023-12-11 10:26:46.698 1311-1355 ZrHung.App...rentWindow system_server D handleMessage CHECK_TRANS_WINDOW_ERROR_MSG
  3. 2023-12-11 10:26:50.796 1311-18277 AwareLog system_server W AwareMem_Reclaim: generateCompressList procsGroups error!
  4. 2023-12-11 10:26:52.875 1311-1947 ZrHung.App...ocusWindow system_server D FocusWindowErrorScene CheckFreezeScreen
  5. 2023-12-11 10:26:53.072 1311-1609 InputDispatcher system_server W channel '5fd2c33 com.bishal.incubator/com.bishal.incubator.profile.EditProfileActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
  6. 2023-12-11 10:26:53.074 1311-1609 InputDispatcher system_server W channel '8a81dad com.bishal.incubator/com.bishal.incubator.home.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
  7. 2023-12-11 10:26:53.074 1311-1609 InputDispatcher system_server W channel 'a489a9a com.bishal.incubator/com.bishal.incubator.add_post.AddPostActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
  8. 2023-12-11 10:26:53.074 1311-1609 InputDispatcher system_server W channel '1def340 com.bishal.incubator/com.bishal.incubator.home.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
  9. ---------------------------- PROCESS ENDED (18502) for package com.bishal.incubator ----------------------------
  10. 2023-12-11 10:26:53.303 18181-19220 DropBoxUtil com.google.android.gms.persistent E [AppErrors] null InputStream [CONTEXT service_id=254 ]
  11. java.io.IOException: null InputStream
  12. at cgon.d(:com.google.android.gms@[email protected] (100400-587848529):209)
  13. at cgmv.l(:com.google.android.gms@[email protected] (100400-587848529):7)
  14. at cgmp.apply(:com.google.android.gms@[email protected] (100400-587848529):37)
  15. at rlc.apply(:com.google.android.gms@[email protected] (100400-587848529):5)
  16. at rlo.apply(:com.google.android.gms@[email protected] (100400-587848529):45)
  17. at cyxp.a(:com.google.android.gms@[email protected] (100400-587848529):3)
  18. at dhiq.a(:com.google.android.gms@[email protected] (100400-587848529):13)
  19. at dnvc.d(:com.google.android.gms@[email protected] (100400-587848529):3)
  20. at dnve.run(:com.google.android.gms@[email protected] (100400-587848529):42)
  21. at dnwp.execute(:com.google.android.gms@[email protected] (100400-587848529):1)
  22. at dnuy.h(:com.google.android.gms@[email protected] (100400-587848529):1)
  23. at dnuy.hi(:com.google.android.gms@[email protected] (100400-587848529):40)
  24. at dnve.g(:com.google.android.gms@[email protected] (100400-587848529):13)
  25. at cyxf.a(:com.google.android.gms@[email protected] (100400-587848529):20)
  26. at dhio.a(:com.google.android.gms@[email protected] (100400-587848529):13)
  27. at dnwv.a(:com.google.android.gms@[email protected] (100400-587848529):20)
  28. at dnyy.a(:com.google.android.gms@[email protected] (100400-587848529):3)
  29. at dnxz.run(:com.google.android.gms@[email protected] (100400-587848529):21)
  30. at dnza.run(:com.google.android.gms@[email protected] (100400-587848529):5)
  31. at dnwx.run(:com.google.android.gms@[email protected] (100400-587848529):53)
  32. at dnwp.execute(:com.google.android.gms@[email protected] (100400-587848529):1)
  33. at dnwx.execute(:com.google.android.gms@[email protected] (100400-587848529):76)
  34. at dnuy.h(:com.google.android.gms@[email protected] (100400-587848529):1)
  35. at dnuy.hi(:com.google.android.gms@[email protected] (100400-587848529):40)
  36. at dnwz.c(:com.google.android.gms@[email protected] (100400-587848529):31)
  37. at cyxj.i(:com.google.android.gms@[email protected] (100400-587848529):18)
  38. at cyxo.a(:com.google.android.gms@[email protected] (100400-587848529):10)
  39. at dhiq.a(:com.google.android.gms@[email protected] (100400-587848529):13)
  40. at dnvc.d(:com.google.android.gms@[email protected] (100400-587848529):3)
  41. at dnve.run(:com.google.android.gms@[email protected] (100400-587848529):42)
  42. at dnwp.execute(:com.google.android.gms@[email protected] (100400-587848529):1)
  43. at dnuy.h(:com.google.android.gms@[email protected] (100400-587848529):1)
  44. at dnuy.hi(:com.google.android.gms@[email protected] (100400-587848529):40)
  45. at dnve.g(:com.google.android.gms@[email protected] (100400-587848529):13)
  46. at cyxr.a(:com.google.android.gms@[email protected] (100400-587848529):20)
  47. at dhio.a(:com.google.android.gms@[email protected] (100400-587848529):13)
  48. at dnwv.a(:com.google.android.gms@[email protected] (100400-587848529):20)
  49. at dnyy.a(:com.google.android.gms@[email protected] (100400-587848529):3)
  50. at dnxz.run(:com.google.android.gms@[email protected] (100400-587848529):21)
  51. at dnza.run(:com.google.android.gms@[email protected] (100400-587848529):5)
  52. at dnwx.run(:com.google.android.gms@[email protected] (100400-587848529):53)
  53. at dnwp.execute(:com.google.android.gms@[email protected] (100400-587848529):1)
  54. at dnwx.execute(:com.google.android.gms@[email protected] (100400-587848529):76)
  55. at dnuy.h(:com.google.android.gms@[email protected] (100400-587848529):1)
  56. at dnuy.hi(:com.google.android.gms@[email protected] (100400-587848529):40)
  57. at dnwz.c(:com.google.android.gms@[email protected] (100400-587848529):31)
  58. at cyxy.c(:com.google.android.gms@[email protected] (100400-587848529):56)
  59. at cyxy.b(:com.google.android.gms@[email protected] (100400-587848529):10)
  60. at com.google.android.gms.stats.service.DropBoxEntryAddedChimeraService.a(:com.google.android.gms@[email protected] (100400-587848529):375)
  61. ---------------------------- PROCESS STARTED (19232) for package com.bishal.incubator ----------------------------

chy5wohz

chy5wohz1#

解决方案是使用(在setUpTabs()下):

  1. viewPagerAdaptor = ViewPagerAdaptor(childFragmentManager)

字符串
而不是:

  1. viewPagerAdaptor = ViewPagerAdaptor(requireActivity().supportFragmentManager)


下面是ViewPagerAdaptor类:

  1. class ViewPagerAdaptor (fragmentManager: FragmentManager) :
  2. FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
  3. private val fragmentList = mutableListOf<Fragment>()
  4. override fun getCount(): Int {
  5. return fragmentList.size
  6. }
  7. override fun getItem(position: Int): Fragment {
  8. return fragmentList[position]
  9. }
  10. fun addFragments(fragment: Fragment) {
  11. fragmentList.add(fragment)
  12. }
  13. }

展开查看全部

相关问题