setTargetFragment в диалоговом фрагменте не работает - android - PullRequest
0 голосов
/ 17 марта 2020

Я звоню DialogFragment в другом fragment, как показано ниже:

@CoursesFragmentScope
class CoursesFragment : DaggerFragment(),
    DefaultLifecycleObserver,
    CourseTypeListDialogFragment.ApplySelectedCourseTypeFilter {
    @OnClick(R.id.btnCourseType)
    fun btnCourseTypeClick() {

        val fm = activity!!.supportFragmentManager
        val courseTypeListDialogFragment =
            CourseTypeListDialogFragment()
        courseTypeListDialogFragment.isCancelable = false
        courseTypeListDialogFragment.setStyle(
            DialogFragment.STYLE_NO_TITLE,
            0
        )
        courseTypeListDialogFragment.setTargetFragment(this, 1)
        courseTypeListDialogFragment.show(fm, "")
    }
}

А мой DialogFragment похож на:

class CourseTypeListDialogFragment: DaggerAppCompatDialogFragment(), CourseTypeAdapter.CourseTypeListener {
    interface ApplySelectedCourseTypeFilter {
        fun applySelectedCourseType()
    }
..some code..
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ButterKnife.bind(this, view)
        iApplySelectedCourseTypeFilter = targetFragment as ApplySelectedCourseTypeFilter
     }
..some code..
}

Но поймите меня ниже error в этой строке:

courseTypeListDialogFragment.setTargetFragment(this, 1)

И скажите мне:

Fragment CourseTypeListDialogFragment{92f4a96 (cbe1689e-1367-4436-8de6-3797320e7d41) } declared target fragment CoursesFragment{422cc09 (9d16e30b-fd71-44a8-8c45-8a866b62c135) id=0x7f0800d5} that does not belong to this FragmentManager!

Что я могу сделать?

Оба класса из одного пакета:

import dagger.android.support.DaggerAppCompatDialogFragment
import dagger.android.support.DaggerFragment

Я удалил courseTypeListDialogFragment.setTargetFragment(this, 1) и открыл диалоговое окно, но не работает мой interface в dialog.

Я использую с fragments в activity, как показано ниже:

class MainActivity : DaggerAppCompatActivity() {
    @BindView(R.id.nav_view)
    lateinit var navView: BottomNavigationView

    override fun onCreate(savedInstanceState: Bundle?) {
        super<DaggerAppCompatActivity>.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ButterKnife.bind(this)

        val navController = findNavController(R.id.nav_host_fragment)
        navView.setupWithNavController(navController)
        navView.menu.findItem(R.id.navigation_courses).setIcon(
            IconDrawable(this, MaterialCommunityIcons.mdi_account_box)
                .colorRes(R.color.colorPrimaryDark)
                .actionBarSize())

        navView.menu.findItem(R.id.navigation_login).setIcon(
            IconDrawable(this, MaterialCommunityIcons.mdi_login)
                .colorRes(R.color.colorPrimaryDark)
                .actionBarSize())

    }
}

1 Ответ

1 голос
/ 17 марта 2020

изменить эту строку

val fm = activity!!.supportFragmentManager

на

val fm = fragmentManager

читать следующий блог
https://medium.com/better-programming/what-is-target-fragment-da0e7c7f345c

...