如何在一堆需要控制邻居的Android按钮上运行循环?

时间:2010-11-09 08:37:03

标签: java android

我有一个文本输入列表,每个输入都包含数字。在每个左边是一个按钮,右边的“ - ”表示“+”。

所以,它看起来像这样:

[ - ] [ 1111 ] [ + ]
[ - ] [ 1112 ] [ + ]
[ - ] [ 1113 ] [ + ]
etc...

我希望每个[ - ]改变它旁边的字段的值,将其减少1,并且每个[+]增加它左边的字段的值。

有没有办法可以编写一个通用的监听器,在实例化时,将一个param作为要编辑的文本字段的id? setOnClickListener只接受一个View.OnClickListener作为参数,并且不能给任何额外的参数挂起。我是否必须使用自己的自定义侦听器扩展View.OnClickListener才能执行此操作?还是有一些明显的方法来完成我忽略的任务?

TIA。

3 个答案:

答案 0 :(得分:2)

您是正确的onClick OnClickListener事件只需要一个View作为参数。但是,ButtonEditText类都是View类的后代,因此您可以使用此参数来检查触发事件的按钮。下面的代码提供了一个简单的例子:

OnClickListener listener = new OnClickListener()
{
    public void onClick(View v)
    {
        if (v == bt1Decrement)
        {
            // Decrement field 1
        }
        else if (v == bt1Increment)
        {
            // Increment field 1
        }
        // else if... continue to check for the rest of the buttons
    }
};

然后,您可以将此单个侦听器用于所有按钮。上面的代码可能以更优雅的方式完成(例如,保持对某些数组结构中按钮的引用,你可以循环),但它说明了这一点:)

答案 1 :(得分:1)

*请注意,由于不在PC附近,这只是我现在无法测试的一个想法

那么,这个怎么样:按钮扩展了视图类,这意味着它们有一个getParent方法,它将返回它们的父视图。所以,想想这样一个听众:

public void onClick(View v){
TextView count = (TextView) ((v.getParent()).findViewById(R.id.counter));
switch(v.getId()){
case: R.id.incrementButton:
// increase value in count
break;
case R.id.decrementButton:
// decrease value in count
break;
}
}

无需额外的类或hacky id管理,所有这些都在一个简单灵活的OnClickListener中。

答案 2 :(得分:0)

因此,看起来像使用我自己的自定义侦听器扩展View.OnClickListener是最直接的方法。我动态生成文本字段以及+和 - 按钮,并向自定义侦听器传递对文本字段的引用。这有点笨拙,但我现在看不到更直接的方法。

EDIT 保留这个解决方案,因为它也有效,但像mrPjer更好(甚至认为它不是,确切地说,我希望的)。