首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android :在for循环中使用setOnClickListener

Android :在for循环中使用setOnClickListener
EN

Stack Overflow用户
提问于 2015-02-21 12:23:11
回答 5查看 1.6K关注 0票数 3

我正处于android开发的早期阶段,for循环出现了问题。

这是我的代码:

代码语言:javascript
复制
for (int i=0; i<=30; i++){

        tableRows[i] = new TableRow(this);
        tableRows[i].setId(i);
        tableRows[i].setLayoutParams(tableRowParams);
        tableRows[i].setBackgroundResource(R.drawable.bg);

        textViews1[i] = new TextView(this);
        textViews1[i].setText("Eng Kelime " + i);
        textViews1[i].setTextSize(25);
        textViews1[i].setTextColor(Color.WHITE);
        textViews1[i].setId(i);
        textViews1[i].setPadding(20, 30, 0, 0);
        textViews1[i].setLayoutParams(Params2);
        tableRows[i].addView(textViews1[i]);

        textViews2[i] = new TextView(this);
        textViews2[i].setText("Tr Kelime " + i);
        textViews2[i].setTextSize(25);
        textViews2[i].setTextColor(Color.WHITE);
        textViews2[i].setId(i);
        textViews2[i].setPadding(30,30,0,0);
        textViews2[i].setLayoutParams(Params2);
        tableRows[i].addView(textViews2[i]);

        tableLayout.addView(tableRows[i]);

        textViews1[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //These textViews[i] veriables need to be declared final.  
                //But I don't know how!..

                if (textViews2[i].getVisibility() == View.VISIBLE) {
                    textViews2[i].setVisibility(View.INVISIBLE);
                }else{
                    textViews2[i].setVisibility(View.VISIBLE);
                }
            }
        });


    }

我有TableRows和两个textViews在每个TableRows中。当我单击第一个textView1[i],第二个,textView2[i]将是不可见的或可见的。

但是在setOnClickListener代码块中,我有“变量'i‘是从内部类中访问的,需要声明为最终”错误代码。

我宣布ifinal,就像for(final int i=0; i<=30; i++)一样。然后我犯了一个不同的错误。“变量'i‘不能被宣布为最终变量”

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-21 12:29:26

声明一个新变量j并将代码修改为:

代码语言:javascript
复制
final int j = i;
textViews1[j].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (textViews2[j].getVisibility() == View.VISIBLE) {
                textViews2[j].setVisibility(View.INVISIBLE);
            }else{
                textViews2[j].setVisibility(View.VISIBLE);
            }
        }
    });

尝尝这个。这会管用的。

票数 4
EN

Stack Overflow用户

发布于 2015-02-21 12:28:31

为了从内部类访问局部变量,必须声明它为final,因此不能在外部更改它。您可以通过使用额外的虚拟变量来做到这一点:

代码语言:javascript
复制
final index = i; // here!
textViews1[i].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (textViews2[index].getVisibility() == View.VISIBLE) {
                textViews2[index].setVisibility(View.INVISIBLE);
            }else{
                textViews2[index].setVisibility(View.VISIBLE);
            }
        }
    });
票数 2
EN

Stack Overflow用户

发布于 2015-02-21 12:29:54

试试这个:

代码语言:javascript
复制
final TextView txtToToggle = textViews2[i];
textViews1[i].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (txtToToggle.getVisibility() == View.VISIBLE) {
            txtToToggle.setVisibility(View.INVISIBLE);
        } else {
            txtToToggle.setVisibility(View.VISIBLE);
        }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28645751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档