代码之家  ›  专栏  ›  技术社区  ›  richc

TimePickerDialogue Fragment Kotlin需要哪个片段管理器

  •  0
  • richc  · 技术社区  · 6 年前

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

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

    并说:

    show()方法需要fragmentmanager的实例和片段的唯一名称。

    当我把这个转换成Kotlin的时候 getSupportFragmentManager 提供的方法。我应该用什么代替?

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

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

    我的main活动将显示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)
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Zoe - Save the data dump 张群峰    6 年前

    片段没有supportfragmentmanager字段或getter。无论是用kotlin还是java编写它,这都适用。

    然而,活动确实如此。因此,调用活动并获取supportfragmentmanager:

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

    此外,如果 this 你在文档中看到的是:

    还要确保 你的活动 显示时间选择器扩展的 碎片活动而不是标准活动类 . (强调我的)

    这意味着 showTimePickerDialog 方法在活动中定义。别搞错了,我不是说你必须在一个活动中定义它,但是既然他们在文档中就是这么做的,他们可以直接调用supportfragmentmanager。但如果从片段或活动外部的任何地方调用它,则需要一个活动实例。