【问题标题】:Introducing onClick function leads to compiler errors引入 onClick 函数会导致编译器错误
【发布时间】:2019-03-22 15:23:10
【问题描述】:

我想创建一个可以链接到 Android Studio 中的按钮的函数。但是 Android Studio IDE 让我错过了)和;错误,当我想将其链接到 onclick 事件时可以找到该函数

OefenActivity.java:

package com.example.rick2.rekentuin_native;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class OefenenActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    int index = 0;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_oefenen);

    String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
    TextView tv1 = findViewById(R.id.textView6);
    tv1.setText(sessionId);

    int intArray[] = new int[]{1,2,3,4,5,6,7,8,9,10};

    TextView tv2 = findViewById(R.id.textView5);
    tv2.setText(Integer.toString(intArray[index]));

    public void CheckAns(View view) {
        EditText edit = findViewById(R.id.editText4);
        Integer result = Integer.parseInt(edit.getText().toString());
        int number1 = Integer.parseInt(sessionId);

        if(result == intArray[index] + number1) {
            if(index < 10) {
                index++;
                tv2.setText(Integer.toString(intArray[index]));
            }
        }
    }
}
}

给我带来问题的功能是:

 public void CheckAns(View view) {
    EditText edit = findViewById(R.id.editText4);
    Integer result = Integer.parseInt(edit.getText().toString());
    int number1 = Integer.parseInt(sessionId);

    if(result == intArray[index] + number1) {
        if(index < 10) {
            index++;
            tv2.setText(Integer.toString(intArray[index]));
        }
    }
}

Android Studio 给我以下错误:

')' expected,
';' expected,
cannot resolve symbol 'view',
unexpected token,
variable 'CheckAns' is never used.

【问题讨论】:

  • 把这个函数移到onCreate()之外。
  • 另外,挑剔:其中一些不是警告,它们是错误。没有任何改变,但值得注意。
  • @Zoe 感谢您的反馈

标签: java android scope


【解决方案1】:

你的函数应该在类中而不是在 onCreate 方法中。 onCreate 本身就是一个方法。所以像下面那样做

package com.example.rick2.rekentuin_native;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class OefenenActivity extends AppCompatActivity {

int index = 0;
int intArray[] = new int[]{1,2,3,4,5,6,7,8,9,10};
TextView tv2;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_oefenen);

    String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
    TextView tv1 = findViewById(R.id.textView6);
    tv1.setText(sessionId);



    tv2 = findViewById(R.id.textView5);
    tv2.setText(Integer.toString(intArray[index]));
}

public void CheckAns(View view) {
        EditText edit = findViewById(R.id.editText4);
        Integer result = Integer.parseInt(edit.getText().toString());
        int number1 = Integer.parseInt(sessionId);

        if (result == intArray[index] + number1) {
            if (index < 10) {
                index++;
                tv2.setText(Integer.toString(intArray[index]));
            }
        }
    }

}

【讨论】:

  • 几种语言允许函数中的函数。 Java 不是其中之一。
  • 我几乎赞成,直到您说“一个方法如何包含另一个方法/功能”。方法绝对可以做到这一点(lambdas)。
  • 哈哈抱歉,我也忘记了 lambdas
  • @BakonJarser 我假设 OP 意味着直接声明。您不能声明 accessmodifier returntype,但显然可以声明 lambda 和内部类,但从技术上讲,它们是变量而不是函数。
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多