内部的两个按钮OnClickListeners for循环

时间:2012-08-15 08:26:13

标签: android button android-button

我正在自学Android,现在我正在学习如何使用按钮。我创建了一个简单的up计数器,其工作原理如下: 我在不同的文本字段中添加字符串(例如,1 2 3)。然后我想成对地比较那些(1与2,1与3,2与3)。第一个字符串元素写在第一个按钮上,第二个字符串写在第二个按钮上,按下任何一个按钮后,按钮上的标记必须改变(如果有1和2那么它应该改为1和3或2和3等)和字符串元素获得更高的排名。一切似乎都运作良好,但我认为添加按钮我犯了很大的错误。谁能帮我? :)我可以添加像我在代码中所做的按钮监听器吗? :)谢谢!

public void counter() 
{
    int i = 0;
    int a = i + 1;

    for ( i = 0; i < candidates.size() - 1; i++ ) 
    {
            Log.d(TAG, "Setting button one tag: " + i );
            button_one.setTag(i);
            button_one.setText(candidates.get(i).name);

            for (a = i + 1; a < candidates.size(); a++)
            {
            Log.d(TAG, "Setting button two tag: " + a );
            button_two.setTag(a);
            button_two.setText(candidates.get(a).name);

            button_one.setOnClickListener(new View.OnClickListener() 
            {

                public void onClick(View view) {

                    /* Read the clicked tag */
                    int tag = (Integer) view.getTag();

                    /* Make higher rank */
                    candidates.get(tag).addRank();
                }
            });

            button_two.setOnClickListener(new View.OnClickListener() 
            {

                public void onClick(View view) {

                    /* Read the clicked tag */
                    int tag = (Integer) view.getTag();

                    /* Make higher rank */
                    candidates.get(tag).addRank();
                }
            }); 
            }       
    }

2 个答案:

答案 0 :(得分:0)

一般情况下,不需要在循环中添加点击侦听器,除非您以动态创建这些按钮。

在循环中为同一个按钮设置单击侦听器,每次循环循环时,除了覆盖以前的设置外什么都不做,所以我没有看到这样做的任何意义。

答案 1 :(得分:0)

一切AndyRes说: 你正在创建(candidates.size()* candidates.size())OnClickListeners的数量 这是一大堆不必要的物品占据你的记忆。

你应该创建一个OnClickListener mListener = new View.OnClickListener etc... etc... 并且可能在您定义OnCreate()之后的button_one = (Button)findViewById(R.id.button_one); button_one.setOnClickListener(mListener);期间{{1}}

通过这种方式,您只有一个侦听器可以提供您可能拥有的任意数量的按钮,并且不需要再次设置相同的侦听器。