从由viewpager连接的子片段访问父片段的视图

时间:2020-09-27 07:25:27

标签: android

我有一个片段,恰好是主机片段,另外还有一个视图分页器。我想从子级访问父级片段中的视图分页器,以便在单击按钮时可以管理currentItem属性,但无法使用parentFragment

父片段

class ClientFragment : DaggerFragment() {
    lateinit var adapter: ViewPagerAdapter
    private lateinit var nextBtn: Button
    private lateinit var progressBar: ProgressBar
    private val title by lazy {
        getName()
    }
    val clientManagementViewPager by lazy {
        (client_management_included_viewPager as? ViewPager2)
    }
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_client, container, false)
    }

    override fun onResume() {
        super.onResume()

        setupViewPager()
        val toolbar = (client_management_toolbar as Toolbar)
        toolbar.setTitleTextColor(
            ContextCompat.getColor(
                requireContext(),
                R.color.colorPrimaryDark
            )
        )

        val navController = Navigation.findNavController(client_management_appBar)


        NavigationUI.setupWithNavController(toolbar, navController)
        nextBtn = client_account_next_btn2.findViewById(R.id.btn)
        progressBar = client_account_next_btn2.findViewById(R.id.progress_bar)

        val nextBtnBackground =
            ContextCompat.getDrawable(requireContext(), R.drawable.rounded_corner_background)
        nextBtnBackground?.colorFilter = PorterDuffColorFilter(
            ContextCompat.getColor(requireContext(), R.color.colorPrimary),
            PorterDuff.Mode.SRC_IN
        )

        nextBtn.text = getString(R.string.next)
        nextBtn.background = nextBtnBackground
        nextBtn.setTextColor(ContextCompat.getColor(requireContext(), R.color.colorAccent))

        nextBtn.setOnClickListener {
            clientManagementViewPager?.currentItem = 1
        }

        clientManagementViewPager?.registerOnPageChangeCallback(object :ViewPager2.OnPageChangeCallback(){
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                when(position){
                    1 -> nextBtn.hide()
                    0-> nextBtn.show()
                }
            }

        })

    }
    }

儿童片段

class ClientAccountFragment : DaggerFragment(){
    private val title by lazy {
        getName()
    }
    private lateinit var nextBtn: Button
    private lateinit var progressBar: ProgressBar

    @Inject
    lateinit var viewModelProviderFactory: ViewModelFactory
    private val authViewModel: AuthViewModel by lazy {
        ViewModelProvider(this, viewModelProviderFactory).get(AuthViewModel::class.java)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_client_account, container, false)
    }


    override fun onResume() {
        super.onResume()


        (parentFragment as? ClientFragment)?.setItem(2)
        
            nextBtn.setOnClickListener {
                Log.i(title, "here2")
                (parentFragment as? ClientFragment)?.clientManagementViewPager?.currentItem = 1
    }
    }
}

1 个答案:

答案 0 :(得分:0)

我能够通过以下几行来解决此问题

val navHostFragment = requireActivity().supportFragmentManager.fragments[0] as NavHostFragment
val parent = navHostFragment.childFragmentManager.primaryNavigationFragment as ClientFragment