【问题标题】:setTargetFragment in dialogfragment not work - androiddialogfragment 中的 setTargetFragment 不起作用 - android
【发布时间】:2020-03-17 11:34:36
【问题描述】:

我在另一个fragment 中调用DialogFragment,如下所示:

@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) 并打开了对话框,但在dialog 中我的interface 不起作用。

我在activity中使用fragments,如下所示:

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())

    }
}

【问题讨论】:

  • 你是怎么添加的。 CoursesFragment 你用过 supportFragmentManager 吗?
  • @Fahad Alotaibi。更新了我的问题。
  • 此问题与片段管理器有关,请参阅更新后的答案

标签: android android-fragments fragment android-dialogfragment


【解决方案1】:

改变这一行

val fm = activity!!.supportFragmentManager

val fm = fragmentManager

阅读以下博客
https://medium.com/better-programming/what-is-target-fragment-da0e7c7f345c

【讨论】:

  • @Fahad Alotaibi。我找不到任何 childFragmentManager。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2019-12-16
  • 2015-04-19
  • 2015-03-01
相关资源
最近更新 更多