如何在 Kotlin 中对多个函数使用相同的 setOnClickListener?
How to use same setOnClickListener for mutliple functions in Kotlin?
我有这个 setOnClickListener,它首先检查用户是否登录,然后如果用户登录,运行 函数如下:
like.setOnClickListener {
val sharedPreference2 = context?.getSharedPreferences("isLogin", Context.MODE_PRIVATE)
val fbtoken = sharedPreference2?.getString("UserToken", "false")
if(fbtoken.equals("false"))
{
val builder = AlertDialog.Builder(context).create()
val optionDialog = AlertDialog.Builder(context)
val layoutInflator = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val dialogView = layoutInflator.inflate(R.layout.alert_reg, null)
val goreg = dialogView.findViewById<TextView>(R.id.confirmation_reg)
val cancel = dialogView.findViewById<TextView>(R.id.cancel_reg)
builder.setCancelable(false)
builder.setView(dialogView)
goreg?.setOnClickListener {
val intent = Intent(context, SignupActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
cancel?.setOnClickListener {
builder.dismiss()
}
builder.show()
}
else
{
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
}
}
所以这个 setOnClickListener 首先会检查登录,然后在“其他”中 post 在 API。
我正在尝试使用与上面相同的 setOnClickListener,如果用户再次单击,它将从 API
中删除
我尝试将“else”替换为“if”和“else”,如下面的代码所示:
if (fbtoken.equals("true")){
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
}else{
like.setImageResource(R.drawable.like)
deleteLike(position, it.context)
}
但现在它只从 API 中删除了它
有点像IG点赞按钮,第一次点击会post类似,再点击会删除
我做错了什么?
您没有更改保存在首选项中的值。您需要在单击按钮时将值更新为 true false。
if (fbtoken.equals("true")){
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
fbtoken = sharedPreference2?.putString("UserToken", "false")
}else{
like.setImageResource(R.drawable.like)
deleteLike(position, it.context)
fbtoken = sharedPreference2?.putString("UserToken", "true")
}
正确的方法是,不要在每次用户单击图像时都调用 setImageResouce,而是让选择器有两种状态,就像这样
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_address_item_bg"android:state_selected="false"/>
<item android:drawable="@drawable/ic_selected_address_bg"
android:state_selected="true"/>
<item android:drawable="@drawable/ic_selected_address_bg" />
</selector>
您应该将此 xml 设置为图像视图或其他视图的 src 参数。
之后你应该根据用户操作分别改变视图状态
likeButton.setonCLickListener {
it.isSelected = !it.isSelected
if (it.isSelected) {
postLike()
} else {
postUnlike()
}
}
我有这个 setOnClickListener,它首先检查用户是否登录,然后如果用户登录,运行 函数如下:
like.setOnClickListener {
val sharedPreference2 = context?.getSharedPreferences("isLogin", Context.MODE_PRIVATE)
val fbtoken = sharedPreference2?.getString("UserToken", "false")
if(fbtoken.equals("false"))
{
val builder = AlertDialog.Builder(context).create()
val optionDialog = AlertDialog.Builder(context)
val layoutInflator = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val dialogView = layoutInflator.inflate(R.layout.alert_reg, null)
val goreg = dialogView.findViewById<TextView>(R.id.confirmation_reg)
val cancel = dialogView.findViewById<TextView>(R.id.cancel_reg)
builder.setCancelable(false)
builder.setView(dialogView)
goreg?.setOnClickListener {
val intent = Intent(context, SignupActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
cancel?.setOnClickListener {
builder.dismiss()
}
builder.show()
}
else
{
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
}
}
所以这个 setOnClickListener 首先会检查登录,然后在“其他”中 post 在 API。
我正在尝试使用与上面相同的 setOnClickListener,如果用户再次单击,它将从 API
中删除我尝试将“else”替换为“if”和“else”,如下面的代码所示:
if (fbtoken.equals("true")){
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
}else{
like.setImageResource(R.drawable.like)
deleteLike(position, it.context)
}
但现在它只从 API 中删除了它
有点像IG点赞按钮,第一次点击会post类似,再点击会删除
我做错了什么?
您没有更改保存在首选项中的值。您需要在单击按钮时将值更新为 true false。
if (fbtoken.equals("true")){
postLike(position, it.context)
like.setImageResource(R.drawable.liked)
fbtoken = sharedPreference2?.putString("UserToken", "false")
}else{
like.setImageResource(R.drawable.like)
deleteLike(position, it.context)
fbtoken = sharedPreference2?.putString("UserToken", "true")
}
正确的方法是,不要在每次用户单击图像时都调用 setImageResouce,而是让选择器有两种状态,就像这样
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_address_item_bg"android:state_selected="false"/>
<item android:drawable="@drawable/ic_selected_address_bg"
android:state_selected="true"/>
<item android:drawable="@drawable/ic_selected_address_bg" />
</selector>
您应该将此 xml 设置为图像视图或其他视图的 src 参数。
之后你应该根据用户操作分别改变视图状态
likeButton.setonCLickListener {
it.isSelected = !it.isSelected
if (it.isSelected) {
postLike()
} else {
postUnlike()
}
}