Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一堆需要控制邻居的Android按钮上运行循环?_Java_Android - Fatal编程技术网

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

Java 如何在一堆需要控制邻居的Android按钮上运行循环?,java,android,Java,Android,我有一个文本输入列表,每个输入都包含数字。每个按钮的左边是一个按钮,上面写着“-”,右边是一个按钮,上面写着“+” 所以,看起来是这样的: [ - ] [ 1111 ] [ + ] [ - ] [ 1112 ] [ + ] [ - ] [ 1113 ] [ + ] etc... public void onClick(View v){ TextView count = (TextView) ((v.getParent()).findViewById(R.id.counter)); switch

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

所以,看起来是这样的:

[ - ] [ 1111 ] [ + ]
[ - ] [ 1112 ] [ + ]
[ - ] [ 1113 ] [ + ]
etc...
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;
}
}
我希望每个[-]改变它旁边字段的值,将其减少1,每个[+]增加它左边字段的值

是否有一种方法可以编写一个通用侦听器,在实例化时,将要编辑的文本字段的id作为参数? setOnClickListener仅将View.OnClickListener作为参数,并且不能为其提供任何额外的参数。我是否必须使用自己的自定义侦听器扩展View.OnClickListener才能执行此操作?还是有什么明显的方法可以完成我忽略的任务

TIA.

您认为的事件只接受一个参数是正确的。但是,和类都是
视图
类的后代,因此可以使用这一参数检查触发事件的按钮。下面的代码提供了一个简单的示例:

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
    }
};

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

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

编辑
保留此解决方案,因为它也可以工作,但像mrPjer的一个更好的解决方案(甚至认为它不是我所希望的)。

*请注意,这只是一个我现在无法测试的想法,因为我没有靠近PC

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

[ - ] [ 1111 ] [ + ]
[ - ] [ 1112 ] [ + ]
[ - ] [ 1113 ] [ + ]
etc...
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;
}
}

不需要额外的类或黑客id管理,所有这些都在一个简单灵活的OnClickListener中

你说你有一个编辑文本列表,右边各有一个按钮?所以+和-按钮只处理分配给它们的编辑文本,而不是所有的都是正确的吗?是的,这就是目的。问题是,没有简单的方法将它们关联起来,因为它们的ID并没有以任何有意义的方式存在于检查中。我可以将其称为plus0、field0和minus0,但它们都被转换成代码,我无法以“哈希”方式访问它们。然而,我现在已经通过扩展click处理程序解决了这个问题,正如我所认为的那样。我希望有人会过来说:“你可以得到项目的XILID ID,然后把它作为一个字符串来检查,然后从中取出数字,然后去访问相应的文本字段。谢谢。我想到了这个方法,但是,不幸的是,这需要我考虑我列表中的每一个可能的项目。(根据其他因素,一共有N个)。因此,我创建了自己的监听器,它实现了View.onClickListener,我在一个循环中为每一组按钮和输入传递所有必要的信息。我想你可以称之为更“优雅”,当然更冗长!)@德雷德尔博士:好的,我明白了。我四处看了看,发现了一些关于
set/getInputExtras
android:editorExtras
()。我自己没有试过,但这可能对你有用吗?忘了提一下,这假设(-),(+)计数器都包含在一个视图中,例如LinearLayout,这样findViewById只将一行中的那些作为候选。是的……这也可以工作。不确定是否使用计数器id,但如果这些都是动态生成的,则不必这样做。