2024/4/11

跟着教程写todoapplication

package com.example.to_do_application.fragments.update

import android.app.AlertDialog
import android.os.Bundle
import android.view.*
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.example.to_do_application.R
import com.example.to_do_application.data.models.Priority
import com.example.to_do_application.data.models.ToDoData
import com.example.to_do_application.data.viewmodel.ToDoViewModel
import com.example.to_do_application.databinding.FragmentUpdateBinding
import com.example.to_do_application.fragments.SharedViewModel

class UpdateFragment : Fragment() {

private val args by navArgs<UpdateFragmentArgs>()

private val mSharedViewModel: SharedViewModel by viewModels()
private val mToDoViewModel: ToDoViewModel by viewModels()

private var _binding: FragmentUpdateBinding? = null
private val binding get() = _binding!!


override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Data Binding
_binding = FragmentUpdateBinding.inflate(inflater,container,false)
binding.args = args

//setMenu
setHasOptionsMenu(true)

//Spinner Item Selected Listener
binding.currentSpinner.onItemSelectedListener = mSharedViewModel.listener

return binding.root
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.update_fragment_menu,menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean{
when(item.itemId){
R.id.menu_save -> updateItem()
R.id.menu_delete -> confirmItemRemoval()
}
return super.onOptionsItemSelected(item)
}


private fun updateItem() {
val mTitle = binding.currentTitleEt.text.toString()
val mDescription = binding.currentEditTextTextMultiLine.text.toString()
val mPriority = binding.currentSpinner.selectedItem.toString()

val validation = mSharedViewModel.verifyDataFromUser(mTitle,mDescription)
if(validation){
//Update CurrentItem
val updateItem = ToDoData(
args.currentItem.id,
mTitle,
mSharedViewModel.parsePriority(mPriority),
mDescription
)
mToDoViewModel.updateData(updateItem)
Toast.makeText(requireContext(),"Successfully update!", Toast.LENGTH_SHORT).show()
//Navigation back
findNavController().navigate(R.id.action_updateFragment_to_listFragment)
}else {
Toast.makeText(requireContext(),"Pleas fill out all fields!", Toast.LENGTH_SHORT).show()
}
}

//Show AlertDialog to Confirm item Removal
private fun confirmItemRemoval() {
val builder = AlertDialog.Builder(requireContext())
builder.setPositiveButton("Yes"){_,_ ->
mToDoViewModel.deleteData(args.currentItem)
Toast.makeText(
requireContext(),
"Successfully Removed:${args.currentItem.tile}",
Toast.LENGTH_SHORT
).show()
findNavController().navigate(R.id.action_updateFragment_to_listFragment)
}
builder.setNegativeButton("No"){_,_ -> }
builder.setTitle("Delete '${args.currentItem.tile}'?")
builder.setMessage("Are you sure you want to remove '${args.currentItem.tile}'?")
builder.create().show()
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

}
posted @ 2024-04-11 19:17  Hbro  阅读(21)  评论(0)    收藏  举报