Android Kotlin DialogFragment(时间选择器)

Android Kotlin DialogFragment(时间选择器),android,kotlin,Android,Kotlin,我在Kotlin中显示Android的DialogFragment时遇到问题。到目前为止,我得到的是: TimePickerFragment.kt package de.flokol120.UniversalSleepTimer import android.app.Dialog import android.app.DialogFragment import android.widget.TimePicker import android.app.TimePickerDialog impor

我在Kotlin中显示Android的DialogFragment时遇到问题。到目前为止,我得到的是:

TimePickerFragment.kt

package de.flokol120.UniversalSleepTimer

import android.app.Dialog
import android.app.DialogFragment
import android.widget.TimePicker
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import java.util.*


/**
 * @author flokol120
 * TimePicker Fragment to get the time
 */
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        return TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()))
    }

    override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
        //TODO add this
    }
}
package de.flokol120.UniversalSleepTimer

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button


/**
 * @author flokol120
 * the fragment which adds a simple kill Timer
 */
class AddTimer : Fragment() {

    lateinit var timePicker : Button

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val v = inflater!!.inflate(R.layout.fragment_add_timer, container, false)

        timePicker = v.findViewById(R.id.timePicker)

        timePicker.setOnClickListener {
            val newFragment = TimePickerFragment()
            newFragment.show(fragmentManager, "timePicker")
        }

        return v
    }

}
AddTimer.kt

package de.flokol120.UniversalSleepTimer

import android.app.Dialog
import android.app.DialogFragment
import android.widget.TimePicker
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import java.util.*


/**
 * @author flokol120
 * TimePicker Fragment to get the time
 */
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        return TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()))
    }

    override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
        //TODO add this
    }
}
package de.flokol120.UniversalSleepTimer

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button


/**
 * @author flokol120
 * the fragment which adds a simple kill Timer
 */
class AddTimer : Fragment() {

    lateinit var timePicker : Button

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val v = inflater!!.inflate(R.layout.fragment_add_timer, container, false)

        timePicker = v.findViewById(R.id.timePicker)

        timePicker.setOnClickListener {
            val newFragment = TimePickerFragment()
            newFragment.show(fragmentManager, "timePicker")
        }

        return v
    }

}
我还尝试用
this@AddTimer.fragmentManager
但这似乎不是解决方案

我现在很无知,因为Android Studio说我必须使用
碎片管理器作为第一个参数,但我正在使用一个,对吗?

也许这对您有帮助

我有一个函数getDate()

如果活动需要调用DatePickerDialog-我只需使用我的函数

presenter.getDate(textViewTime, this)
presenter-它是我的函数getDate的对象,它提供了一个简洁的解决方法,用于日期选择器。我将他的想法格式化为与时间选择器一起工作:

fun getTime(textView: TextView, context: Context){

    val cal = Calendar.getInstance()

    val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute ->
        cal.set(Calendar.HOUR_OF_DAY, hour)
        cal.set(Calendar.MINUTE, minute)

        textView.text = SimpleDateFormat("HH:mm").format(cal.time)
    }

    textView.setOnClickListener {
        TimePickerDialog(context, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show()
    }
}

看起来您正在混合常规DialogFragment和支持库片段。 您应该扩展“android.support.v4.app.DialogFragment”而不是“import android.app.DialogFragment”

支持库使用支持库版本FragmentManager,而不是常规的片段管理器


希望这有帮助。

谢谢您的回答。但我想要一个时间选择器,而不是日期选择器。但是也有一个计时器对话框,我可以用,谢谢!非常感谢。错误已消失,但都
newFragment.show(this@AddTimer.fragmentManager,“timePicker”)
newFragment.show(fragmentManager,“timePicker”)
生成一个
java.lang.IllegalArgumentException:指定为非null的参数为null:method kotlin.jvm.internal.Intrinsics.checkParametersnotnull,参数savedInstanceState
。有什么想法吗?
 private var date: DatePickerDialog.OnDateSetListener? = null

 date = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->

            myCalendar?.set(Calendar.YEAR, year)
            myCalendar?.set(Calendar.MONTH, monthOfYear)
            myCalendar?.set(Calendar.DAY_OF_MONTH, dayOfMonth)
            val myFormat = "yyyy-MM-dd"
            val sdf = SimpleDateFormat(myFormat, Locale.getDefault())
            Log.d("date_of_birth", sdf.format(myCalendar?.time))

        }