Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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 AddTextChangedListener以循环生成的EditText视图_Java_Android_For Loop_Android Edittext_Addtextchangedlistener - Fatal编程技术网

Java AddTextChangedListener以循环生成的EditText视图

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

我是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.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);