【发布时间】:2021-05-16 09:42:17
【问题描述】:
我正在尝试创建一个删除菜单图标,当我点击它时,它会打开一个对话框,询问是否从列表中删除此项目,但是当我点击它时什么都没有发生。
删除菜单所在的文件
UpdateFragment.kt
包 com.example.roomtutorial1.fragments.update
import android.app.AlertDialog
import android.os.Bundle
import android.text.TextUtils
import android.view.*
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.example.roomtutorial1.R
import com.example.roomtutorial1.data.UserViewModel
import com.example.roomtutorial1.model.User
import kotlinx.android.synthetic.main.fragment_update.*
import kotlinx.android.synthetic.main.fragment_update.view.*
class UpdateFragment : Fragment() {
private val args by navArgs<UpdateFragmentArgs>()
private lateinit var mUserViewModel: UserViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_update, container, false)
mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
view.updateFirstName.setText(args.currentUser.firstName)
view.updateLastName.setText(args.currentUser.lastName)
view.updateAge.setText(args.currentUser.age.toString())
view.updateBtn.setOnClickListener {
updateItem()
}
//Set menu
setHasOptionsMenu(true)
return view
}
private fun updateItem() {
val firstName = updateFirstName.text.toString()
val lastName = updateLastName.text.toString()
val age = updateAge.text.toString()
if (!(TextUtils.isEmpty(firstName) && TextUtils.isEmpty(lastName) && age.isEmpty())) {
//Create User Object
val updateUser = User(args.currentUser.id, firstName, lastName, age.toInt())
//Update current user
mUserViewModel.updateUser(updateUser)
//Navigate back
findNavController().navigate(R.id.action_updateFragment_to_listFragment)
Toast.makeText(requireContext(), "Updated Successfully", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(requireContext(), "Please fill all the fields", Toast.LENGTH_SHORT)
.show()
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.delete_menu, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.menu.delete_menu) {
deleteUser()
}
return super.onOptionsItemSelected(item)
}
private fun deleteUser() { //delete function
val builder = AlertDialog.Builder(requireContext())
builder.setPositiveButton("Yes") { _, _ ->
mUserViewModel.deleteUser(args.currentUser)
Toast.makeText(
requireContext(),
"Successfully Deleted ${args.currentUser.firstName}",
Toast.LENGTH_SHORT
).show()
}
builder.setNegativeButton("No") { _, _ -> }
builder.setTitle("Delete ${args.currentUser.firstName}?")
builder.setMessage("Are you sure you want to delete ${args.currentUser.firstName}")
builder.create().show()
}
}
delete_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_delete"
android:title="Delete"
android:icon="@drawable/ic_delete_24"
android:iconTint="@color/white"
app:showAsAction="ifRoom"
/>
</menu>
注意:评论您还需要哪些文件,我将编辑问题。
【问题讨论】:
-
尝试在
deleteUser()之前或之后添加日志 -
@Marat 当我点击它时没有 deleteUser() 的日志,它只是没有做任何事情
-
您确定图标来自您的片段而不是来自您的活动吗?
-
@Marat 是的,我是..
-
可以包含delete_menu.xml吗?
标签: android android-studio kotlin android-room