我有一个文本输入列表,每个输入都包含数字。在每个左边是一个按钮,右边的“ - ”表示“+”。
所以,它看起来像这样:
[ - ] [ 1111 ] [ + ]
[ - ] [ 1112 ] [ + ]
[ - ] [ 1113 ] [ + ]
etc...
我希望每个[ - ]改变它旁边的字段的值,将其减少1,并且每个[+]增加它左边的字段的值。
有没有办法可以编写一个通用的监听器,在实例化时,将一个param作为要编辑的文本字段的id? setOnClickListener只接受一个View.OnClickListener作为参数,并且不能给任何额外的参数挂起。我是否必须使用自己的自定义侦听器扩展View.OnClickListener才能执行此操作?还是有一些明显的方法来完成我忽略的任务?
TIA。
答案 0 :(得分:2)
您是正确的onClick
OnClickListener
事件只需要一个View
作为参数。但是,Button
和EditText
类都是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更好(甚至认为它不是,确切地说,我希望的)。