Проблема при создании диалогового окна внутри фрагмента (Kotlin)

#java #android #kotlin

#java #Android #kotlin

Вопрос:

впервые задавая вопрос здесь, надеюсь, я получу ответ 🙂 Я новичок в Kotlin, я программирую на C более 3 лет, и только сейчас я перешел на мобильные приложения, поэтому мой вопрос таков: я пытаюсь создать диалоговое окно внутри фрагмента, которое позволяет пользователю вставлять текст свободного поля. когда он нажимает кнопку «Плюс», должно открыться диалоговое окно с текстовой областью свободного поля, которая позволяет ему вставлять текст, а затем нажимать «Добавить» или «Отменить», когда я запускаю программу, все, что я вижу в диалоговом окне, — это кнопки «Добавить» и «Отмена», но я не вижу саму панель текстового поля.

но когда я меняю представление с fragment_view на dialog_view, я вижу панель текстового поля. (я надеюсь, что я был ясен в объяснении моей проблемы) это мой фрагмент кода (fragment_shopping_list):

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

        val view = inflater.inflate(R.layout.fragment_shopping_list, container, false)
        val addItem_button = view.findViewById<com.google.android.material.floatingactionbutton.FloatingActionButton>(R.id.fab_shoppiglist)
        addItem_button.setOnClickListener {
            val dialog = AlertDialog.Builder(getContext())
            val tempView = inflater.inflate(R.layout.dialog_shoppinglist,null )
            dialog.setPositiveButton("Add"){ _: DialogInterface, _: Int ->

            }
            dialog.setNegativeButton("Cancel"){ _: DialogInterface, _: Int->

            }
            dialog.show()

        }

        return view
    } 
  

и это мой диалоговый код (dialog_shoppinglist):

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <EditText
        android:id="@ id/et_Itemlist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>
  

Ответ №1:

 val dialog = context?.let { AlertDialog.Builder(it) }
dialog?.setView(R.layout.dialog_shoppinglist)
dialog?.setPositiveButton("Add"){ _: DialogInterface, _: Int ->
}
dialog?.setNegativeButton("Cancel"){ _: DialogInterface, _: Int->
}
dialog?.show()
  

Комментарии:

1. пожалуйста, добавьте минимальное описание того, что делает код.

Ответ №2:

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

 val tempView = inflater.inflate(R.layout.dialog_shoppinglist, null)
val dialog = AlertDialog.Builder(getContext())
    .setPositiveButton("Add"){ _: DialogInterface, _: Int ->

    }.setNegativeButton("Cancel"){ _: DialogInterface, _: Int->

    }.create()

dialog.show()
dialog.window!!.setContentView(tempView)
// the following is optional
dialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
dialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
  

Добавьте это одним нажатием кнопки:

 val text = tempView.findViewById<EditText>(R.id.et_Itemlist).text.toString
  

И вы можете получить текст, который вы ввели в диалоговом окне.

Комментарии:

1. Спасибо, что пытались помочь. я попробовал ваше решение, и компилятор не распознал диалоговое окно. окно!! но я заметил, что я не добавил метод dialog.setView () теперь, когда я добавил метод dialog.setView, я вижу панель текстового поля в моем диалоговом окне. еще раз спасибо за ваше внимание, хороший сайт, я буду использовать это сообщество для консультаций и решения других проблем в будущем, ти, и хорошего дня

2. @sean Я забыл это: val dialog = AlertDialog. Конструктор (getContext()).create()