#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
. может быть, ты захочешь попробовать это в первую очередь.