Java AddTextChangedListener以循环生成的EditText视图
我是Android开发新手。我正面临为一个项目开发应用程序的死胡同。请花点时间帮我一下 问题: 我正在使用Java AddTextChangedListener以循环生成的EditText视图,java,android,for-loop,android-edittext,addtextchangedlistener,Java,Android,For Loop,Android Edittext,Addtextchangedlistener,我是Android开发新手。我正面临为一个项目开发应用程序的死胡同。请花点时间帮我一下 问题: 我正在使用for循环生成嵌套在LinearLayout中的一些EditText视图 例如: LinearLayout rootView = (LinearLayout) findViewById(R.id.rootview); for (int i=0,j=10;i<j;i++) { EditText et = new EditText(this); rootView.addVi
for循环生成嵌套在LinearLayout
中的一些EditText
视图
例如:
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.
LinearLayout rootView=(LinearLayout)findViewById(R.id.rootView);
对于(int i=0,j=10;i我无法访问带有AS on it atm的机器,因此不能保证以下内容没有错误,但这应该为您指明正确的方向:
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=。。。;
//在你的圈子里
et.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
公共无效后文本更改(最终可编辑){
对于(int i=0;i
编辑:因此上述操作将导致无限循环-请参阅我下面的评论
那么:
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);
}
}
});
final LinearLayout rootLayout=。。。;
//同样,在你的循环中
TextWatcher TextWatcher=新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,int count){}
@凌驾
public void beforeTextChanged(字符序列s、int start、int count、int after){}
@凌驾
公共无效后文本更改(最终可编辑){
对于(int i=0;i
基本上,只有聚焦元素才会让textwatcher
首先在XML中添加这样的线性布局
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
并为此自定义视图类创建新的XML文件名edit_text_cust
<EditText
android:id="@+id/dateEditText"
android:layout_width="match_parent"
android:background="@android:color/transparent"
android:padding="@dimen/_5sdp"
android:layout_height="match_parent"
android:textSize="@dimen/_12sdp" />
在for循环内的类中
Model model = new Model();
model.setHint("HINT");
model.setId("1");
editTextCust = new EditTextCust(this, editTextCustModel, InputType.TYPE_CLASS_NUMBER, 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) {
// getText from here use
s.toString();
}
@Override
public void afterTextChanged(Editable s) {
}
});
linearLayout.addView(editTextCust);
这是正确的,如果您不理解这段代码中的任何内容,请添加注释,我将帮助您:)首先,非常感谢您如此快速地回复。当我使用您的解决方案时,应用程序会正常启动,但只要我在任何EditText中键入一个数字,应用程序就会停止响应,logcat就会无限期地被这样的行填充<代码>背景粘性并发标记扫描GC释放了17184(564KB)AllocSpace对象,0(0B)LOS对象,18%空闲,2MB/3MB,暂停5.756ms总计22.762ms
哈哈,是的,现在我想它改变了一个字段中的文本,导致另一个字段中的文本改变,这将触发其TextWatcher,等等,让我想一想。它就像一个有点修改的魅力。非常感谢你的回答。哇!非常感谢这个解决方案。试过之后我会回来的我不认为这是OP想要的。。。而且比它需要的复杂得多。@TylerSebastian我想听听你的建议。虽然这种方法可能有效,但@TylerSebastian的解决方案更加简洁和中肯。无论如何,非常感谢你花时间来帮助我。那意味着很多!
<EditText
android:id="@+id/dateEditText"
android:layout_width="match_parent"
android:background="@android:color/transparent"
android:padding="@dimen/_5sdp"
android:layout_height="match_parent"
android:textSize="@dimen/_12sdp" />
public class Model {
String hint;
String id;
String data;
public String getHint() {
return hint;
}
public void setHint(String hint) {
this.hint = hint;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
Model model = new Model();
model.setHint("HINT");
model.setId("1");
editTextCust = new EditTextCust(this, editTextCustModel, InputType.TYPE_CLASS_NUMBER, 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) {
// getText from here use
s.toString();
}
@Override
public void afterTextChanged(Editable s) {
}
});
linearLayout.addView(editTextCust);