当前位置: 首页 > 知识库问答 >
问题:

如何对Kotlin中的mutliple函数使用相同的setOnClickListener?

艾宏远
2023-03-14

我有一个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将首先检查登录,并在“else”中发布API。

if (fbtoken.equals("true")){
                postLike(position, it.context)
                like.setImageResource(R.drawable.liked)
            }else{
                like.setImageResource(R.drawable.like)
                deleteLike(position, it.context)
            }

它的东西类似IG喜欢按钮,如果我点击第一次按钮,它将张贴喜欢,如果我再次点击,它将删除它。

我在这里做错了什么?

共有1个答案

晏卓君
2023-03-14

您不能更改保存在首选项中的值。您需要在单击按钮时将值更新为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")
}
 类似资料:
  • 我在将应用程序从Java镜像到Kotlin时遇到了一些问题。我用java编写了这个类,效果很好: 在IntelijiIdea中自动转换后,它开始变成这样 但编译器告诉我 意外重写:以下声明具有相同的JVM签名(to boolean(Ljava/lang/String;)Z): fun toBoolean(p0: String?):在my . util . booleanutils fun to B

  • 让我们假设我在科特林有一门课,如下所示 此外,让我们定义一个内插函数生成电子邮件域,它基于给定域的名称生成电子邮件地址 现在,正如有人说Kotlin是100%可与Java互操作的,我如何在Java类中使用这个中缀函数? 上面使用infix可能不合适,但我想知道如何在Java中使用。 如果我的理解有误,请纠正。

  • 我实际上是使用处理来检查从键盘输入的值并采取行动。现在的问题是,我想使用键盘上的数字“1”来根据IF语句执行两个不同的操作,但第二个条件似乎不起作用。请帮助我仔细阅读这段代码,因为我不知道我可能在哪里出错了

  • 如标题所示,在中,是否有方法在延迟(例如1秒)后调用函数?

  • 我想知道是否可以在同伴对象中使用类的属性。例如,以贝娄为例: 我不能通过c1或C2调用changeAge()函数。我可以使用changeAge的唯一地方是通过Person1.changeAge(),当Person1还没有用适当的构造函数实例化时。我想知道这些动作是不是有其他的选择,或者是没有,有同伴对象有什么意义呢

  • 当函数声明类型参数时: 我应该如何在kotlin中调用原始的未类型化的类型化函数? 在爪哇中,我有: 因为< code>typedFunction声明了一个名为< code>T的类型,并将它的两个参数绑定到这个声明的类型,并且在调用站点上,我循环了多个确切类型未知的值(但已知是安全的,两个参数符合相同的类型),所以我不能按预期的方式调用typedFunction。我得把它铸造成一种原始类型。 如何

  • 我正在尝试从函数返回布尔值。 错误:布尔文字不符合预期的类型单位。 我知道unit是kotlin中的默认返回类型。我将如何将其更改为布尔值。

  • 我是一个本地开发人员和新的Unity。我试图发挥我的优势,在Kotlin编码,然后使用我的代码作为一个插件在Unity。我遇到的一个问题是,我不知道如何引用伴生对象内部的函数。 但我怎样才能在团结中也这样做呢?以下是我尝试过的。 我收到的错误是, AndroidJavaException:java.lang.NosuchMethodError:没有具有name='factory'signature