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

当我尝试使用onclicklistener时,我一直得到“修饰符覆盖不适用于本地函数”

洪彬
2023-03-14

我正在尝试为一个小测验应用程序编写代码。当你点击加号按钮时,它会将你带到一个单独的页面,在那里你可以输入问题和答案。当您单击“检查”按钮时,它会将您带回到上一页,并创建一个新按钮,其中文本设置为问题。当我试图在buttonclick事件下设置覆盖时,遇到了一个错误。有什么我可以解决的吗?

新网页:

    package com.example.test

import android.app.Activity
import android.content.Intent
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import com.google.android.material.floatingactionbutton.FloatingActionButton

class Newbtn : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_newbtn)

        val newbutton = Button(this@Newbtn)
        val btn = findViewById<FloatingActionButton>(R.id.btn2)
        val intent = getIntent()
        val test = intent.getStringExtra("test")

        newbutton.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
        newbutton.width=1010
        newbutton.height=300
        newbutton.gravity = Gravity.CENTER
        newbutton.translationX= 65F
        newbutton.setTextColor(Color.parseColor("#FFFFFFFF"))
        newbutton.setBackgroundColor(Color.parseColor("#250A43"))
        newbutton.text = test


        btn.setOnClickListener{
            val activityCode = 2
            startActivityForResult(
                    Intent(this@Newbtn, QuestionPage::class.java), activityCode
            )

            override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
                super.onActivityResult(requestCode, resultCode, data)
                if (requestCode == activityCode && resultCode == Activity.RESULT_OK) {
                    val buttonText = data?.getStringExtra("test")
                    newbutton.text = buttonText
                }
        }
    }
}}

问题页:

    package com.example.test

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditText
import com.google.android.material.floatingactionbutton.FloatingActionButton

class QuestionPage : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_question_page)

        val btn3 = findViewById<FloatingActionButton>(R.id.btn3)
        val intent = Intent(this@QuestionPage, Newbtn::class.java)
        val question = findViewById<EditText>(R.id.question)
        val answer = findViewById<EditText>(R.id.answer)
        val questiontext = question.text.toString()
        val answertext = answer.text.toString()
        val returnIntent = Intent()

        returnIntent.putExtra("test", questiontext)
        setResult(Activity.RESULT_OK, returnIntent)
        finish()

        btn3.setOnClickListener{
            startActivity(intent)
        }
    }
}

共有1个答案

冉伯寅
2023-03-14

您的Newbtn活动需要一个onCreate函数和一个onActivityResult函数,两者都位于同一级别(活动内部)。现在,一个嵌套在另一个中,也嵌套在未关闭的click listener lambda中。

查看IDE内部的垂直线:

看看当你打开一个作用域时,比如用一个函数或lambda,有一条垂直线从你打开这个作用域的地方到你关闭它的地方,也就是关闭括号的位置?查看如何btn。setOnClickListener扩展到比应该结束的地方更远的地方?如何在活动结果中插入onActivityResult

您可以使用这些指南来帮助您在支撑混乱时清理东西,并确保东西正确嵌套。所以onActivityResult应该和onCreate处于相同的缩进级别,它应该在onActivityResult的开括号之前关闭——两行分开,一行接一行,每一行都以开括号结束。

您不能引用active ityCode,因为您在单击监听器lambda中定义了它,它是一个局部变量,您无法从外部看到它。它不会在当前代码中抱怨,因为您在lambda中嵌套了onActivityResult,在那里它可以看到变量——但是代码被破坏了,因为函数无论如何都不应该在那里。

只需将activityCode值粘贴在类中的某个位置,甚至在类之外(类似的常量是const-val-ACTIVITY\u-code=2声明的很好候选者)。基本上,您的onActivityResult函数需要能够处理传入的任何结果,并引用它应该处理的可能识别代码。这些不应该在click listener中秘密定义,因为这样活动就会返回结果并说“2是什么意思?”

 类似资料:
  • 我的代码是 此代码给出的输出为 以及如何打印所有组的开始和结束索引?

  • 所以我只想使用谷歌云视觉应用编程接口从图像中检测文本或标签。但是当我运行这段代码时,我总是得到: 但我不知道为什么。。。下面是我得到的完整json输出: 我的测试代码如下: 所以问题是。。此代码有什么问题?

  • 当我尝试编译项目时,我收到了这个错误: java版本 OpenJDK版本“11.0.2”2019-01-15 OpenJDK运行时环境(build 11.0.2 9-Debian-3)OpenJDK 64位服务器VM(build 11.0.2 9-Debian-3,混合模式,共享) mvn-版本 Maven home:/usr/share/Maven Java版本:11.0.2,供应商:Oracl

  • 问题内容: 我试图用groovy为Swagger页面编写Selenium对象构建器。为了便于讨论,我的问题代码可以简化为以下几种: 调用它非常简单(来自JUnit3): 该构造函数是一个可怕的眼睛痛!我试图用以下等待替换它: 要么: 两者都产生了相同的结果:以开头的行中的闭包中的“ org.openqa.selenium.StaleElementReferenceException:元素不再连接到

  • 我正在尝试部署到heroku,但得到了503,即使它在localhost上运行。我很好奇我的服务器是否设置正确,因为我对编程比较陌生。我希望任何人都能给我指出正确的方向,告诉我在哪里可以查看或提供建议,因为我已经在谷歌上花费了数不清的时间,已经持续了几个星期。 我的主要问题是我是否正确设置了服务器?我不确定我的听众是否会为heroku和我的同事工作。get最初设置时用于在本地主机上进行调试。 此外

  • 当我试图在flash插件和red5服务器安装之间建立连接时,我得到了以下错误。请帮帮我. [ERROR][rtmpConnectionExecutor#dtqatxjixlu78-1]org.red5.server.net.rtmp.basertmphandler-Exception java.lang.nosuchmethoderror:org.red5.server.scope.scope$c