Android for循环中的OnClickListener

Android for循环中的OnClickListener,android,for-loop,indexoutofboundsexception,Android,For Loop,Indexoutofboundsexception,在OnClick方法中尝试使用for循环中的“I”变量时,我得到了一个“Error:(99,95)Error:local variable I是从内部类中访问的;需要声明为final”。 我试图将这个“I”放在一个全局变量中,但得到了一个“ArrayIndexOutOfBoundsException”。 但我不能用其他方式来思考。 private void createTextViews(TextView[] textViewArray, LinearLayout linearLayou

在OnClick方法中尝试使用for循环中的“I”变量时,我得到了一个“Error:(99,95)Error:local variable I是从内部类中访问的;需要声明为final”。
我试图将这个“I”放在一个全局变量中,但得到了一个“ArrayIndexOutOfBoundsException”。
但我不能用其他方式来思考。

    private void createTextViews(TextView[] textViewArray, LinearLayout linearLayout){
    for (int i = 0; i < keys.length; i++) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.setMargins(20, 0, 0, 20);

        TextView newView = new TextView(getActivity());
        newView.setLayoutParams(layoutParams);
        newView.setText("Watch the Trailer " + (i + 1));
        newView.setTextSize(22);
        newView.setTextColor(getResources().getColor(R.color.words));
        newView.setBackgroundColor(getResources().getColor(R.color.button));
        newView.setHighlightColor(getResources().getColor(R.color.background));
        newView.setPadding(5, 5, 5, 5);
        newView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(YOUTUBE_URL+keys[i]));
                startActivity(intent);
            }
        });

        linearLayout.addView(newView);
        textViewArray[i] = newView;
    }
}

获取越界异常的原因是,在上一个循环中,虽然它没有再次进入循环,但i(类变量)现在越界,但您正在执行i++ing操作。因此,将i作为类变量的整个方法在您的情况下不起作用

实现这一点的一种方法是将i实际保存在视图中的标记中,然后从单击的视图中读取该标记

newView.setTag(i)
然后在onClick中

v.getTag() 

以上可用于获取i

必须初始化新的最终int值

添加
final int ex=i

在setOnClickListener之前

别忘了换衣服

Uri.parse(YOUTUBE_URL + keys[i]));


您在哪一行得到错误?函数的第一个参数有问题。显示从何处以及向此发送的内容function@NJay这里:Intent Intent=newintent(Intent.ACTION_视图,Uri.parse(YOUTUBE_URL+keys[i]);它说的正是“错误:(99,95)错误:局部变量i是从内部类中访问的;需要声明为final”请将错误日志粘贴到这里。解决这个问题的一个非常简单的方法是将i声明为类变量@Cas@Cas检查将解决您的问题的解决方案。确保我不再是类变量。@我很乐意帮助您
Uri.parse(YOUTUBE_URL + keys[i]));
Uri.parse(YOUTUBE_URL + keys[ex]));