Добавьте строку ввода из edittext в диалоговом окне в RecyclerView в основной активности

#android #kotlin #android-recyclerview #null #dialog

Вопрос:

Я новичок в разработке приложений для Android и создаю это приложение NotToDoList, которое в основном похоже на обычное приложение ToDoList, Мой код показан ниже, но когда я пытаюсь ввести строку в текст редактирования диалогового окна и добавить, null будет просто добавлен. Если бы вы могли дать несколько советов по этому поводу, я был бы вам признателен.

Основная активность.тыс. т :

 package com.example.nottodoapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.nottodoapp.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding
    private lateinit var notToDoText : String
    private var notToDoList = mutableListOf<DataModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.mainAddBtn.setOnClickListener {
            val addDialog = AddDialog(this)
            addDialog.show()
            addDialog.addDialogBtnAction = {
                if(addDialog.isShowing){
                    addDialog.dismiss()
                    var resultText = addDialog.etNotToDo
                    val dataModel = DataModel(resultText)
                    notToDoList.add(dataModel)

//                    Toast.makeText(this, "NotToDo added", Toast.LENGTH_SHORT ).show()
                    Toast.makeText(this, "${addDialog.etNotToDo}", Toast.LENGTH_SHORT ).show()
                }
            }
        }



        val adapter = RecyclerAdapter(notToDoList)
        binding.rvNottodo.adapter = adapter
        binding.rvNottodo.layoutManager = LinearLayoutManager(this)


    }


}
 

AddDialog.kt (Пользовательский диалог) :

 package com.example.nottodoapp

import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.widget.Toast
import com.example.nottodoapp.databinding.AddDialogBinding

class AddDialog(context : Context) : Dialog(context){

    var addDialogBtnAction : (() -> Unit)? = null
    var etNotToDo : String? = null

    private lateinit var binding : AddDialogBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = AddDialogBinding.inflate(layoutInflater)
        setContentView(binding.root)

        window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        binding.dialogAddBtn.setOnClickListener {
            this.addDialogBtnAction?.invoke()
            etNotToDo = binding.etNottodo.text.toString()
        }

    }
}
 

Модель данных.kt

 package com.example.nottodoapp

import android.view.View

data class DataModel(val mainText : String? = null, val isChecked : Boolean? = null, val deleteBtn : View? = null)
 

Адаптер для переработки.кт

 package com.example.nottodoapp

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.nottodoapp.databinding.RvLayoutBinding

class RecyclerAdapter(var notToDoData : List<DataModel>) : RecyclerView.Adapter<RecyclerAdapter.NotToDoViewHolder>() {

    inner class NotToDoViewHolder(val binding : RvLayoutBinding) : RecyclerView.ViewHolder(binding.root) {

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotToDoViewHolder {
        val binding = RvLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return NotToDoViewHolder(binding)
    }

    override fun onBindViewHolder(holder: NotToDoViewHolder, position: Int) {
        holder.binding.nottodoText.text = notToDoData[position].mainText
    }

    override fun getItemCount(): Int {
        return notToDoData.size
    }
}
 

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

1. Единственное, что я вижу, это то, что вы не звоните adapter.notifydatasetchanged после добавления элемента в список binding.mainAddBtn.setOnClickListener . может быть, ты захочешь попробовать это в первую очередь.