1

我正在根据用户输入以编程方式创建可变数量的 EditText,并且每个EditText都与另一个配对(因此我创建的数量是用户要求的两倍)。当用户将值更改为一个时,我希望匹配的配对EditText也被更改。

我有一个循环,它遍历一个包含所有 editTexts 的数组并TextWatcher为每个数组创建一个,但是当我尝试更改onTextChanged方法中的文本时,程序崩溃了。

for(int i = 0; i < waysToSplit; i++)
{
    editTexts[i] = new EditText(this);
    editTexts[i+waysToSplit] = new EditText(this); //The paired edittext
    editTexts[i].setId(i+1);
    editTexts[i].addTextChangedListener(new TextWatcher(){
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                //Change the paired box
                editTexts[i+waysToSplit].setText("changed");

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub         
            }
 }

它不仅不允许我在 onTextChanged 方法中使用变量 i (“不能引用在不同方法中定义的内部类中的非最终变量 i”),而且即使出于测试目的,我尝试制作一个特定的像 editTexts[3].setText("Changed"); 什么都没发生一样的盒子变化。

希望这是足够的代码来理解正在发生的事情。非常感谢任何帮助。我能找到的最接近的是Android:两个相互依赖的 EditText,但那里没有任何代码。

4

1 回答 1

1

你只需要把你的配对拉到EditText一个单独的声明中。然后,您可以标记它final并在您的侦听器中访问它。

for(int i = 0; i < waysToSplit; i++)
{
    editTexts[i] = new EditText(context);
    final EditText paired = new EditText(context);//The paired edittext
    editTexts[i+waysToSplit] = paired;
    editTexts[i].setId(i+1);
    editTexts[i].addTextChangedListener(new TextWatcher(){
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                //Change the paired box
                paired.setText("changed");
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub         
            }
    });
}
于 2013-10-28T18:57:33.880 回答