【问题标题】:Show a Dialog Fragment using Kotlin使用 Kotlin 显示对话框片段
【发布时间】:2020-11-29 21:40:05
【问题描述】:

我创建了一个代码来显示时间选择器对话框,我使用了这个Android API Code,但是在其中,代码不起作用,因为我无法调用 supportFragmentManager。这里是我的代码如下,

AddToDoFragment.kt

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.findNavController
import com.dsgimhana.todoapp.databinding.FragmentAddToDoBinding

class AddToDoFragment : Fragment() {
    private var _binding: FragmentAddToDoBinding? = null

    private val binding get() = _binding!!

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        _binding = FragmentAddToDoBinding.inflate(inflater,container,false)
        binding.saveToDoBtn.setOnClickListener{view->
            view.findNavController().navigate(R.id.action_addToDoFragment_to_toDoListFragment)
        }
        binding.timePicker.setOnClickListener{view->
            val timePicker = TimePickerFragment()
            timePicker.show(supportFragmentManager,"time_picker")
        }
        return binding.root


    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

TimePickerFragment.kt

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

class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // Use the current time as the default values for the picker
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        // Create a new instance of TimePickerDialog and return it
        return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity))
    }

    override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
        TODO("Not yet implemented")
    }
}

【问题讨论】:

    标签: android android-studio kotlin android-fragments android-timepicker


    【解决方案1】:

    你在Fragment,而不是Activity

    您可以通过从FragmentActivity 调用getSupportFragmentManager() 或从Fragment 调用getFragmentManager() 来获取FragmentManager

    所以你需要 getFragmentManager()(或者在 Kotlin 中只需要 fragmentManager) - 或者 parentFragmentManager 如果你愿意,前者已被弃用,并告诉你改用它

    【讨论】:

      【解决方案2】:

      请尝试,

      val transaction = supportFragmentManager.beginTransaction()
      timePicker.show(transaction,"time_picker")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 2016-07-17
        相关资源
        最近更新 更多