循环中的OnClick无法正常运行...
错误是指数组值过多,我不知道为什么。
有没有一种方法可以使OnClick正常循环运行?
Logcat
2020-02-08 17:58:36.295 20307-20307 / com.example.pagevalue_shift_2 E / AndroidRuntime:FATAL EXCEPTION:main
Process: com.example.pagevalue_shift_2, PID: 20307
java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at com.example.pagevalue_shift_2.MainActivity$1.onClick(MainActivity.java:32)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
//错误代码
package com.example.pagevalue_shift_2;]
import androidx.appcompat.app.AppCompatActivity;
导入android.os.Bundle;
导入android.view.View;
import android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
import com.example.pagevalue_shift_2.R;
公共类MainActivity扩展了AppCompatActivity {
TextView []textView = new TextView[3]; String a[] = {"a","b","c"}; int i; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView[0] = findViewById(R.id.textView1); textView[1] = findViewById(R.id.textView2); textView[2] = findViewById(R.id.textView3); for(i =0; i<3; i++){ textView[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),a[i],Toast.LENGTH_SHORT).show();//error occurred } }); } }
}
OnClick在循环中无法正常运行...错误是指数组值过多,我不知道为什么。有没有办法使OnClick正常循环运行? Logcat 2020-02-08 17:...
您正在为每个类创建一个匿名类(View.OnClickListener)textView,该类中的onClick()方法具有不同的范围比方法getValuesPressed()更大,因此它无权访问局部变量i。
int i
的值是外部不可变变量,在for循环完成后将等于3
。因此,此后的所有点击都会触发相同的代码:
您可以将id赋予文本视图并按以下方式获取它-