gpt4 book ai didi

java - AddTextChangedListener 到循环生成的 EditText View

转载 作者:行者123 更新时间:2023-11-30 00:52:58 27 4
gpt4 key购买 nike

我是 Android 开发新手。我正面临为项目开发应用程序的死胡同。请花点时间帮助我。

问题:我正在使用 for 循环 生成一些嵌套在 LinearLayout 中的 EditText View 。

例如:

LinearLayout rootView = (LinearLayout) findViewById(R.id.rootview);
for (int i=0,j=10;i<j;i++) {
EditText et = new EditText(this);
rootView.addView(et);
et.setHint("EditText No. "+ i);
et.setId(i);
} // This code is for example purposes only.

现在,我似乎无法理解如何在特定时间聚焦的 EditText 上设置 addTextChangedListener 并将该文本设置在其他 EditText 上。请告诉我应该采用什么方法来实现这一目标。我尽力解释问题;但是,如果仍有任何歧义,请随时发表评论并询问。我正在等待这个问题的解决方案。

在截图方面:

我有什么:

enter image description here

我想要的:

enter image description here

我希望这能解决问题!

**

编辑:

感谢 TylerSebastian 提供的解决方案。我让它工作了。这是最终代码:(内部 OnCreate() 方法)

final LinearLayout rootView = (LinearLayout) findViewById(R.id.rootview);
for (int i=0,j=10;i<j;i++) {

final EditText et = new EditText(this);
rootView.addView(et);
et.setHint("EditText No. "+ i);
et.setId(i);
final TextWatcher textwatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void afterTextChanged(final Editable s) {
for (int i=0;i<10;i++){
EditText view = (EditText) findViewById(i);
if (view != et){
view.setText(s.toString());
}
}
}
};
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
et.addTextChangedListener(textwatcher);
} else {
et.removeTextChangedListener(textwatcher);
}
}
});

}

**

最佳答案

我无法访问带有 AS 的机器,所以不能保证以下内容没有错误,但这应该为您指明正确的方向:

final LinearLayout rootLayout = ...;

// within your loop
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void afterTextChanged(final Editable s) {
for (int i = 0; i < rootLayout.getChildCount(); i++) {
View view = rootLayout.getChildAt(i);

if (view instanceof EditText && view != et) {
((EditText) view).setText(s.toString());
}
}
}
});

编辑:所以上面的内容会导致无限循环 - 请参阅下面的评论

怎么样:

final LinearLayout rootLayout = ...;

// again, within your loop
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void afterTextChanged(final Editable s) {
for (int i = 0; i < rootLayout.getChildCount(); i++) {
View view = rootLayout.getChildAt(i);

if (view instanceof EditText && view != et) {
((EditText) view).setText(s.toString());
}
}
}
};

et.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
((EditText) view).addTextChangedListener(textWatcher);
} else {
((EditText) view).removeTextChangedListener(textWatcher);
}
}
});

基本上,只有焦点元素才会有 textwatcher

关于java - AddTextChangedListener 到循环生成的 EditText View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com