0

我正在自学 Android,现在我正在学习如何使用按钮。我创建了一个简单的向上计数器,其工作原理如下:我在不同的文本字段中添加字符串(例如 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();
                }
            }); 
            }       
    }
4

2 回答 2

0

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

在循环中为同一个按钮设置点击侦听器,每次循环循环时,只会覆盖以前的设置,所以我认为这样做没有任何意义。

于 2012-08-15T08:36:23.907 回答
0

AndyRes 所说的一切加上:您正在创建 (candidates.size() * Candidates.size()) 数量的 OnClickListener,这是大量不必要的对象占用您的内存。

你应该在你定义你之后创建一个OnClickListener mListener = new View.OnClickListener etc... etc... 和外部循环OnCreate()button_one = (Button)findViewById(R.id.button_one);button_one.setOnClickListener(mListener);

这样,您只有 1 个侦听器可以为您可能拥有的任意数量的按钮提供服务,并且不需要再次设置同一个侦听器。

于 2012-08-15T09:14:01.813 回答