Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android在ImageView数组中循环并调用以ImageView为参数的函数_Java_Android_Arrays_For Loop - Fatal编程技术网

Java Android在ImageView数组中循环并调用以ImageView为参数的函数

Java Android在ImageView数组中循环并调用以ImageView为参数的函数,java,android,arrays,for-loop,Java,Android,Arrays,For Loop,我想循环一个ImageView数组,为每个ImageView调用一个函数,并使用ImageView作为函数的参数,同时为循环设置一个暂停,这样循环将暂停3秒,然后再使用下一个ImageView调用函数。到目前为止,这是我得到的最接近的结果,但它仍然显示出错误,因为我无法从Runnable中访问数组 MainActivity.java public class MainActivity extends Activity implements View.OnClickListener {

我想循环一个ImageView数组,为每个ImageView调用一个函数,并使用ImageView作为函数的参数,同时为循环设置一个暂停,这样循环将暂停3秒,然后再使用下一个ImageView调用函数。到目前为止,这是我得到的最接近的结果,但它仍然显示出错误,因为我无法从Runnable中访问数组

MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener {

    ImageView imageView1, imageView2, imageView3,........ imageView16;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView1 = (ImageView) findViewById(R.id.imageView1);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
        .
        .
        .

        Handler handler = new Handler();

        // Array of ImageView(s)
        final ImageView[] pieces = {imageView1, imageView2, .....};

        // Looping through ImageView array
        for(int i = 0; i < pieces.length; i++) {
            Runnable shuffle = new Runnable() {
                public void run() {
                    playLevel(pieces[i]);
                }
            };
            // delay the calling of function so that the loop pause every 3s
            handler.postDelayed(shuffle, 3000);
        }
    }

    public void playLevel(ImageView imageView) {
        // some function
    }
}
public类MainActivity扩展活动实现View.OnClickListener{
ImageView imageView1、imageView2、imageView3、……imageView16;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1=(ImageView)findViewById(R.id.imageView1);
imageView2=(ImageView)findViewById(R.id.imageView2);
.
.
.
Handler=newhandler();
//ImageView的数组
最终ImageView[]片段={imageView1,imageView2,…};
//在ImageView数组中循环
对于(int i=0;i

我们非常欢迎所有的建议和更好的实现方法。谢谢。

您应该能够访问
可运行
中的
片段
变量(因为它是
最终
),您将无法访问的是
i
变量。您可以这样做:
final int index=i
并在
run()
方法中使用
index
而不是
i
。此外,您可能希望增加每个图像的延迟,否则几乎同时执行所有操作

for(int i = 0; i < pieces.length; i++) {
        final int index = i;
        Runnable shuffle = new Runnable() {
            public void run() {
                playLevel(pieces[index]);
            }
        };
        handler.postDelayed(shuffle, (i+1)*3000);
}
for(int i=0;i
谢谢!太好了,现在可以用了。终于,我已经花了好几个小时修改代码了。我现在不能接受你的答案,它说比我能接受你的答案多了3分钟。