TimePickerDialogue Fragment kotlin需要哪个Fragment Manager

Which Fragment Manager is needed for TimePickerDialogue Fragment kotlin

我正在尝试实现一个简单的 TimePickerDialogue 片段,当按下布局中的按钮时显示,该布局也是一个片段。 Android 开发人员指南在 Java 中显示了这一点:

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}

并说:

The show() method requires an instance of FragmentManager and a unique name for the fragment.

当我将其转换为 Kotlin 时,没有提供 getSupportFragmentManager 方法。我应该改用什么?

class AlertsFragment : Fragment() {    

    fun showTimePickerDialog(v: View) {
        val newFragment = TimePickerFragment()
        newFragment.show(FragmentManager(), "timePicker") // WHAT FRAGMENTMGR???
    }
}

我正在导入android.support.v4.app.Fragment

我的 MainActivity 将显示 TimePickerDialogue 片段以及具有用于打开 TimePickerDialogue 的按钮的片段。 MainActivity 有一个使用片段的tablayout。 是否需要在 MainActivity 中更改任何内容才能使 TimePickerDialogue show() 函数在 AlertsFragment 中工作?

class MainActivity : FragmentActivity(){

    private lateinit var pagerAdapter: TabPagerAdapter

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

        setContentView(R.layout.activity_main)

        pagerAdapter = TabPagerAdapter(supportFragmentManager)
        pagerAdapter.addFragments(WorkoutGridFragment(), "Workouts")
        pagerAdapter.addFragments(AlertsFragment(), "Reminders")
        pagerAdapter.addFragments(AboutFragment(), "About")

        // customViewPager is the viewpager created in the activity_main xml layout
        customViewPager.adapter = pagerAdapter

        // set up the viewpager with the tablayout
        customTabLayout.setupWithViewPager(customViewPager)
    }
}

片段没有 SupportFragmentManager 字段或 getter。无论您是用 Kotlin 还是 Java 编写,这都适用。

活动,但是,做。所以调用 activity 并获取 supportFragmentManager:

fun showTimePickerDialog(v: View) {
    val newFragment = TimePickerFragment()
    newFragment.show(activity.supportFragmentManager, "timePicker") 
}

此外,如果 this 是您在文档中阅读的内容,您会看到:

Also make sure that your activity that displays the time picker extends FragmentActivity instead of the standard Activity class. (emphasis mine)

这意味着 showTimePickerDialog 方法是在 Activity 中定义的。不要误会,我并不是说您必须在 activity 中定义它,但由于他们在文档中就是这么做的,所以他们可以直接调用 SupportFragmentManager。但是,如果您从片段或 activity 之外的任何地方调用它,则需要一个 activity 实例。