Как сделать пользовательский DialogFragment в Android? - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь показать пользовательский диалог из фрагмента. Когда он собирается отображаться, экран становится темнее, но диалоговое окно не отображается. Я также пытался показать это по активности, содержащей фрагмент, но получаю тот же результат.

Вот макет моего диалогового окна:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="239dp"
    android:background="#00f"
    >

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="210dp"
        android:layout_marginStart="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginRight="20dp"
        android:background="@drawable/pop_up_shape"
        android:backgroundTint="#00ff00"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        >

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Это мой класс фрагмента диалога:

class AddPlaylistPopUp: DialogFragment(){

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.add_playlist_popup_layout, container, true)
    }
}

, и этот метод должен открывать диалоговое окно в активность:

   fun testBut(view: View) {
        val fm: FragmentManager = supportFragmentManager
        val editNameDialogFragment = AddPlaylistPopUp()
        editNameDialogFragment.show(fm, "fragment_edit_name")
    }

во фрагменте, который я пробовал следующим образом:

  fun openDialog(){
        val fm = fragmentManager!!
        val editNameDialogFragment = AddPlaylistPopUp()
        editNameDialogFragment.show(fm, "fragment_edit_name")
    }

Это руководство, которому я следовал: https://guides.codepath.com/android/Using-DialogFragment#passing -дата-родитель-фрагмент

1 Ответ

0 голосов
/ 28 марта 2020

Вы не создаете Dialog, вместо этого вы должны переопределить onCreateDialog.

class AddPlaylistPopUp: DialogFragment(){

    override fun onCreateDialog(
        savedInstanceState: Bundle?
    ): Dialog {

        val builder = AlertDialog.Builder(getContext())
        builder.setTitle("Title")
        builder.setView(R.layout.add_playlist_popup_layout)

        return builder.create()
    }
}

Таким образом, вам не нужно реализовывать onCreateView(LayoutInflater, ViewGroup, Bundle), и у вас гораздо больше контроля над создание диалога.

Если вы хотите придерживаться подхода onCreateView, вы можете исправить свою проблему, изменив третий параметр вызова функции LayoutInflater.inflate(resource, root, attachToRoot), установив его на false.

РЕДАКТИРОВАТЬ : чтобы сохранить match_parent ширину, переопределить размер диалога .

...