Ошибка Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference

Не создаётся view для диалога. Один и тот же метод addAndEditSchedule вызывается в двух местах. По нажатию на fab во фрагменте и из Aдаптера при нажатие на элемент списка Recycler View. После нажатия fab всё отрабатывает корректно, а после нажатия на view списка выпадает ошибка:

FATAL EXCEPTION: main
Process: com.example.singupactivity, PID: 5970
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
    at android.view.LayoutInflater.from(LayoutInflater.java:229)
    at com.example.singupactivity.ui.main.Fragment.DailyScheduleFragment.addAndEditCars(DailyScheduleFragment.kt:100)
    at com.example.singupactivity.ui.main.Adapter.DailyScheduleAdapter.onBindViewHolder$lambda-0(DailyScheduleAdapter.kt:51)
    at com.example.singupactivity.ui.main.Adapter.DailyScheduleAdapter.$r8$lambda$_ecFXy4TdRjp8oVBxwFPnZaehRU(Unknown Source:0)
    at com.example.singupactivity.ui.main.Adapter.DailyScheduleAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
    at android.view.View.performClick(View.java:6897)
    at android.view.View$PerformClick.run(View.java:26104)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Код Fragment:

class DailyScheduleFragment : Fragment() {

lateinit var adapter: DailyScheduleAdapter
lateinit var dailyScheduleDataClass: DailyScheduleDataClass
lateinit var campDbManager: CampDbManager
var dailyScheduleList = ArrayList<DailyScheduleDataClass>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    campDbManager = activity?.let { CampDbManager(it) }!!
    adapter = DailyScheduleAdapter()
}

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

    val view: View = inflater.inflate(R.layout.fragment_daily_schedule, container, false)

    val rv = view.findViewById<RecyclerView>(R.id.rcDailySchedule)
    val fabDailySchedule = view.findViewById<FloatingActionButton>(R.id.fabDailySchedule)


    rv.layoutManager = GridLayoutManager(activity, 3)
    rv.itemAnimator = DefaultItemAnimator()


    val eventTimeList = campDbManager.selectToTableDailySchedule(COLUMN_NAME_TIME_EVENT)
    val eventNameList = campDbManager.selectToTableDailySchedule(COLUMN_NAME_NAME_EVENT)
    val eventDateList = campDbManager.selectToTableDailySchedule(COLUMN_NAME_DATE_EVENT)

    for ((i, elm) in eventTimeList.withIndex()) {
        adapter.addDailySchedule(
            DailyScheduleDataClass(
                eventTimeList[i],
                eventNameList[i], eventDateList[i]
            )
        )

    }


    fabDailySchedule.setOnClickListener {
        addAndEditSchedule(false, null, -1)
    }


    rv.adapter = adapter
    return view
}

@SuppressLint("InflateParams")
fun addAndEditSchedule(
    isUpdate: Boolean,
    dailyScheduleDataClass: DailyScheduleDataClass?,
    position: Int
) {

    val view = LayoutInflater.from(context).inflate(R.layout.add_daily_schedule, null)


    val alertDialogBuilderUserInput: AlertDialog.Builder =
        AlertDialog.Builder(requireActivity())
    alertDialogBuilderUserInput.setView(view)

    var newDayTitle = view.findViewById<TextView>(R.id.newDayTitle)
    val etName = view.findViewById<EditText>(R.id.etName)
    val etData = view.findViewById<EditText>(R.id.etData)
    val etTime = view.findViewById<EditText>(R.id.etTime)


    newDayTitle.text = if (!isUpdate) "Добавить" else "Редактировать"

    if (isUpdate && dailyScheduleDataClass != null) {
        etName.setText(dailyScheduleDataClass.nameEvent)
        etData.setText(dailyScheduleDataClass.dateEvent)
        etTime.setText(dailyScheduleDataClass.timeEvent)
    }
    alertDialogBuilderUserInput
        .setCancelable(false)
        .setPositiveButton(if (isUpdate) "Обновить" else "Сохранить",
            DialogInterface.OnClickListener { dialogBox, id -> })
        .setNegativeButton(if (isUpdate) "Удалить" else "Закрыть",
            DialogInterface.OnClickListener { dialogBox, id ->
                if (isUpdate) {
                    deleteDailySchedule(position)
                } else {
                    dialogBox.cancel()
                }
            })

    val alertDialog: AlertDialog = alertDialogBuilderUserInput.create()
    alertDialog.show()
    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(View.OnClickListener {
        if (TextUtils.isEmpty(etName.text.toString())) {
            Toast.makeText(requireActivity(), R.string.enter_name_event, Toast.LENGTH_SHORT)
                .show()
            return@OnClickListener
        } else if (TextUtils.isEmpty(etData.text.toString())) {
            Toast.makeText(requireActivity(), R.string.enter_data_event, Toast.LENGTH_SHORT)
                .show()
            return@OnClickListener
        } else if (TextUtils.isEmpty(etTime.text.toString())) {
            Toast.makeText(requireActivity(), R.string.enter_time_event, Toast.LENGTH_SHORT)
                .show()
            return@OnClickListener
        } else {
            alertDialog.dismiss()
        }
        if (isUpdate && dailyScheduleDataClass != null) {
            updateDailySchedule(
                nameEventUpdate = etName.text.toString(),
                dateEventUpdate = etData.text.toString(),
                timeEventUpdate = etTime.text.toString(),
                position = position
            )

        } else {
            createDailySchedule(
                nameEventCreate = etName.text.toString(),
                dateEventCreate = etData.text.toString(),
                timeEventCreate = etTime.text.toString()
            )
        }
    })
}

private fun deleteDailySchedule(position: Int) {

    dailyScheduleList.removeAt(position)

    campDbManager.deleteRawToTableDailySchedule(position)

}

private fun updateDailySchedule(
    timeEventUpdate: String, nameEventUpdate: String,
    dateEventUpdate: String, position: Int
) {

    dailyScheduleDataClass = dailyScheduleList[position]

    dailyScheduleDataClass.timeEvent = timeEventUpdate
    dailyScheduleDataClass.dateEvent = dateEventUpdate
    dailyScheduleDataClass.nameEvent = nameEventUpdate

    dailyScheduleList[position] = dailyScheduleDataClass

    campDbManager.updateRawToTableDailySchedule(
        nameEvent = nameEventUpdate,
        dateEvent = dateEventUpdate,
        timeEvent = timeEventUpdate,
        position = position
    )
}

private fun createDailySchedule(
    timeEventCreate: String, nameEventCreate: String,
    dateEventCreate: String
) {

    val dailyScheduleDataClassCreate = DailyScheduleDataClass(
        timeEvent = timeEventCreate,
        nameEvent = nameEventCreate,
        dateEvent = dateEventCreate
    )
    dailyScheduleList.add(dailyScheduleDataClassCreate)
    for ((i, elm) in dailyScheduleList.withIndex()) {
        adapter.addDailySchedule(dailyScheduleList[i])
    }
    campDbManager.insertToTableDailySchedule(
        nameEvent = nameEventCreate,
        dateEvent = dateEventCreate,
        timeEvent = timeEventCreate
    )
}

}

Код Адаптера:

class DailyScheduleAdapter : RecyclerView.Adapter<DailyScheduleAdapter.DailyScheduleHolder>() {

val dailyScheduleList = ArrayList<DailyScheduleDataClass>()



class DailyScheduleHolder(item : View) : RecyclerView.ViewHolder(item) {

    private val binding = DailySceduleListItemBinding.bind(item)

    fun bind(dailyScheduleDataClass: DailyScheduleDataClass) = with(binding){

        tvNameEvent.text = dailyScheduleDataClass.nameEvent
        tvData.text = dailyScheduleDataClass.dateEvent
        tvTime.text = dailyScheduleDataClass.timeEvent

    }


}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DailyScheduleHolder {

    val view = LayoutInflater.from(parent.context).inflate(R.layout.daily_scedule_list_item, parent, false)

    return DailyScheduleHolder(view)

}

override fun onBindViewHolder(holder: DailyScheduleHolder, position: Int) {

    holder.bind(dailyScheduleList[position])

    val dailyScheduleDataClass: DailyScheduleDataClass = dailyScheduleList[position]

    holder.itemView.setOnClickListener{
        DailyScheduleFragment().addAndEditSchedule(true, dailyScheduleDataClass, position)

    }

}

override fun getItemCount(): Int {

    return dailyScheduleList.size

}

@SuppressLint("NotifyDataSetChanged")
fun addDailySchedule(dailyScheduleDataClass: DailyScheduleDataClass) {

    dailyScheduleList.add(dailyScheduleDataClass)
    notifyDataSetChanged()

}

}


Ответы (0 шт):