for循环中的Android OnClick

问题描述 投票:1回答:3

循环中的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:...

android for-loop onclick
3个回答
3
投票

您正在为每个类创建一个匿名类(View.OnClickListener)textView,该类中的onClick()方法具有不同的范围比方法getValuesPressed()更大,因此它无权访问局部变量i。


1
投票

int i的值是外部不可变变量,在for循环完成后将等于3。因此,此后的所有点击都会触发相同的代码:


0
投票

您可以将id赋予文本视图并按以下方式获取它-

© www.soinside.com 2019 - 2024. All rights reserved.