我在Kotlin用安卓显示DialogFragment时遇到了问题。到目前为止,我得到的是:
The 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
}
}和AddTimer.kt
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
}
}我也尝试用fragmentManager替换this@AddTimer.fragmentManager,但这似乎不是解决方案。
我现在很无知,因为Android说我必须使用FragmentManager!作为第一个参数,但我使用的是一个参数,对吗?
发布于 2017-11-26 18:35:16
Aliaksandr Kavalenka想出了一个很好的解决办法,这是为一个日期选择者而设计的。我用时间选择器格式化了他的想法:
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()
}
}发布于 2017-11-26 17:58:34
也许这对你有帮助
我有一个函数getDate()
fun getDate(textView: TextView, context: Context){
val cal = Calendar.getInstance()
val dateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
cal.set(Calendar.YEAR, year)
cal.set(Calendar.MONTH, monthOfYear)
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)
textView.text = SimpleDateFormat("dd.MM.yyyy").format(cal.time)
}
textView.setOnClickListener {
DatePickerDialog(context, dateSetListener,
cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH)).show()
}
}如果一个活动需要调用DatePickerDialog -我只是使用我的函数
presenter.getDate(textViewTime, this)演示者-它是对象,我的函数getDate在哪里?
发布于 2017-11-27 02:15:01
看起来您将常规的DialogFragment和支持的Lib片段混合在一起。您应该扩展"android.support.v4.app.DialogFragment“而不是”导入android.app.DialogFragment“。
Support使用支持库版本FragmentManager,而不是常规片段管理器。
希望这能有所帮助。
https://stackoverflow.com/questions/47498014
复制相似问题