@vladis005
Начинающий веб разработчик

Как обратиться к свойству класса TodoAdapter в файле с bottom sheet dialog?

Я делаю тудушник. Мне нужно в файле NewTaskSheet обратиться к свойству todos которое в классе TodoAdapter. Потом мне в onClickListener нужно добавить в список новый объект todo с записанными значениями и с помощью recycler view это должно отображаться на экране. Но ничего не выходит. Я не знаю как просто получить этот todos в файле с bottom sheet dialog. Очень нужна ваша помощь!!!

MainActivity
package com.bignerdranch.android.taskmaster


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle



import androidx.recyclerview.widget.LinearLayoutManager
import com.bignerdranch.android.taskmaster.databinding.ActivityMainBinding



class MainActivity : AppCompatActivity() {

    private lateinit var todoAdapter:TodoAdapter
    private lateinit var binding: ActivityMainBinding

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

        setContentView(binding.root)




        todoAdapter = TodoAdapter(mutableListOf())
        binding.rvTodoItems.adapter = todoAdapter
        binding.rvTodoItems.layoutManager = LinearLayoutManager(this)
        binding.btnAddTodo.setOnClickListener{
            NewTaskSheet().show(supportFragmentManager,"NewTaskTag")
            }


    }



}


TodoAdapter
package com.bignerdranch.android.taskmaster



import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CheckBox
import android.widget.TextView



import androidx.recyclerview.widget.RecyclerView
import com.bignerdranch.android.taskmaster.databinding.ItemTodoBinding



class TodoAdapter(
    var todos: MutableList<Todo>
):RecyclerView.Adapter<TodoAdapter.TodoViewHolder>() {

    class TodoViewHolder( ItemTodoBinding: ItemTodoBinding): RecyclerView.ViewHolder(ItemTodoBinding.root)

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

        val layoutInflater = LayoutInflater.from(parent.context)
        val ItemTodoBinding = ItemTodoBinding.inflate(layoutInflater, parent, false)

        return TodoViewHolder(
            return TodoViewHolder(ItemTodoBinding)
        )


    }



    private fun toggleStrikeThrough(tvTodoTitle: TextView, isChecked:Boolean){
        if(isChecked){
            tvTodoTitle.paintFlags = tvTodoTitle.paintFlags or STRIKE_THRU_TEXT_FLAG
        }else{
            tvTodoTitle.paintFlags = tvTodoTitle.paintFlags and STRIKE_THRU_TEXT_FLAG.inv()
        }
    }

    override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {
          val curTodo = todos[position]

          holder.itemView.apply{

              val tvTodoTitle = findViewById(R.id.tvTodoTitle) as TextView

              tvTodoTitle.text = curTodo.title


              val cbDone = findViewById(R.id.cbDone) as CheckBox
              cbDone.isChecked = curTodo.isChecked
              toggleStrikeThrough(tvTodoTitle, curTodo.isChecked)
              cbDone.setOnCheckedChangeListener { _, isChecked ->
                  toggleStrikeThrough(tvTodoTitle, isChecked)
                  curTodo.isChecked = !curTodo.isChecked


              }


              cbDone.setOnClickListener(View.OnClickListener{

                      todos.removeAll{todo->
                          todo.isChecked
                      }

                      notifyDataSetChanged()



              })


        }
    }

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



}


NewTaskSheet
package com.bignerdranch.android.taskmaster

import android.os.Bundle

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView


import com.bignerdranch.android.taskmaster.databinding.FragmentNewTaskSheetBinding
import com.google.android.material.bottomsheet.BottomSheetDialogFragment



class NewTaskSheet() : BottomSheetDialogFragment(){

    private lateinit var binding: FragmentNewTaskSheetBinding
    private lateinit var todo: Todo




    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentNewTaskSheetBinding.inflate(inflater,container,false)

        return binding.root
    }

    override fun onViewCreated(view:View,savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
            todo = Todo(title="",description="",isChecked = false)
            binding.btnSave.setOnClickListener {
               todo.title=binding.title.text.toString()

               binding.title.setText("")
               binding.description.setText("")


           }


    }




}


Todo
package com.bignerdranch.android.taskmaster

data class Todo(
    var title:String,
    var description:String,
    var isChecked:Boolean=false
)
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы