Как я могу вызвать FragmentManager из Fragment?Котлин - PullRequest
0 голосов
/ 24 марта 2019

Я создаю приложение будильника и пытаюсь открыть диалог выбора времени. Мне нужно получить данные о времени после его закрытия. Проблема в .show() функции. Это не работает в фрагменте. Там написано None of the following functions can be called with the arguments supplied.

Мой класс

class AlarmPickerDialog : DialogFragment() {
    override fun onCreateView(inflater: LayoutInflater?, container:
    ViewGroup?, savedInstanceState: Bundle?): View {

        var myView = inflater!!.inflate(R.layout.alarm_time_picker, container, false)

        return myView
    }
}

И мой метод вызова

val alarmDialog = AlarmPickerDialog()
val fm = getActivity()!!.getSupportFragmentManager()
alarmDialog.show(fm, "MyDialog")

Может быть, есть лучший способ получить данные о времени?

Ответы [ 3 ]

2 голосов
/ 25 марта 2019

Проблема: Кажется, AlarmPickerDialog простирается от android.app.DialogFragment вместо android.support.v4.app.DialogFragment.

Решение: Измените код на

// Comment-out this line
// import android.app.DialogFragment

// Add this line
import android.support.v4.app.DialogFragment

class AlarmPickerDialog : DialogFragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var myView = inflater!!.inflate(R.layout.alarm_time_picker, container, false)
        return myView
    }
}
0 голосов
/ 25 марта 2019

Вот решение для вашего кода:

Код для DialogFragment

class ListFragment: DialogFragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val rootView = inflater.inflate(R.layout.list_layout, container)
        var pioneers = arrayOf("Jon Snow", "Mother of Dragon-Khalessi", "Ned Stark", "Benjen Stark", "Cathlyen Stark", "Arya Stark", "Sansa Stark", "Littelfiger", "Jamie Lannister")

        val myListView = rootView.findViewById(R.id.myListView) as ListView
        myListView!!.adapter = ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, pioneers)

        this.dialog.setTitle("Game Of Thrones")

        myListView.setOnItemClickListener {
            adapterView,
            view,
            position,
            l
            -> Toast.makeText(activity, pioneers[position], Toast.LENGTH_SHORT).show()
        }

        return rootView
    }
}


In your activity you can make call something like this

val openFragmentBtn = findViewById<Button>(R.id.openFragmentID)

//On button Click Open Dialog Fragment
    val openFragmentBtn = findViewById(R.id.openFragmentID) as Button

            val fm = supportFragmentManager
            val listFragment= ListFragment()

            openFragmentBtn.setOnClickListener(object : View.OnClickListener {
                override fun onClick(view: View) {
                    listFragment.show(fm, "PioneersFragment_tag")
                }
            })

Попробуйте это

val pop = alarm_first()
val fm = this@YourActivityName.fragmentManager
pop.show(fm, "name")

Я реализовал этокод для учебной цели, но если он вам подходит, я с радостью помогу

0 голосов
/ 24 марта 2019

Эй, попробуйте выполнить следующие действия, https://developer.android.com/reference/android/app/DialogFragment ваш вопрос говорит о том, как вызвать диспетчер фрагментов, но вы уже вызываете его, поэтому ваш вопрос не так решает проблему, и попробуйте следовать этой документации, может, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...