首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android (TimePicker)

Android (TimePicker)
EN

Stack Overflow用户
提问于 2017-11-26 15:54:26
回答 4查看 10.9K关注 0票数 3

我在Kotlin用安卓显示DialogFragment时遇到了问题。到目前为止,我得到的是:

The TimePickerFragment.kt

代码语言:javascript
复制
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

代码语言:javascript
复制
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!作为第一个参数,但我使用的是一个参数,对吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-26 18:35:16

Aliaksandr Kavalenka想出了一个很好的解决办法,这是为一个日期选择者而设计的。我用时间选择器格式化了他的想法:

代码语言:javascript
复制
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()
    }
}
票数 10
EN

Stack Overflow用户

发布于 2017-11-26 17:58:34

也许这对你有帮助

我有一个函数getDate()

代码语言:javascript
复制
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 -我只是使用我的函数

代码语言:javascript
复制
presenter.getDate(textViewTime, this)

演示者-它是对象,我的函数getDate在哪里?

票数 4
EN

Stack Overflow用户

发布于 2017-11-27 02:15:01

看起来您将常规的DialogFragment和支持的Lib片段混合在一起。您应该扩展"android.support.v4.app.DialogFragment“而不是”导入android.app.DialogFragment“。

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47498014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档