добавить addTextChangedListener () к каждому объекту EditText, созданному в цикле - PullRequest
0 голосов
/ 03 января 2012

Я хочу создать n объектов EditText ... поэтому я использую LayoutInflater, чтобы сделать это в цикле, который продолжается до n ... Представления добавляются в макет, но если я хочу добавитьaddTextChangedListener() к каждому из EditText объектов, слушатель добавляется только к последнему объекту ... это проблема закрытия, как я могу решить эту проблему?

    LinearLayout ll=(LinearLayout) findViewById(R.id.i1);
    LayoutInflater li=(LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
    for(int i=0;i<3;i++){
        v=li.inflate(R.layout.addit, null); //v is a View declared as private member of the class
        t=(TextView) v.findViewById(R.id.a1);//t is TextView declared as private member 
        EditText e=(EditText) v.findViewById(R.id.e1);
        e.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

            }

            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {

            }

            public void afterTextChanged(Editable arg0) {
                ret(v, t);
            }
        });
        ll.addView(v);

    }

retфункция

   public void ret(View v,TextView t){
    EditText e=(EditText) v.findViewById(R.id.e1);
    t.setText(e.getText());

}

main xml :

   <?xml version="1.0" encoding="utf-8"?>

   <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"  
     android:id="@+id/i1"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical" >

  </LinearLayout>

addit.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/l2"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical" >
<TextView
    android:id="@+id/a1"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:text="" />
<EditText
    android:id="@+id/e1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPersonName" >

    <requestFocus />
</EditText>

</LinearLayout>

слушатель слушает только изменения в последнем из EditText представлений ... как сделать так, чтобы он прослушивал все три EditText представления?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Это потому, что ваши переменные v и t перезаписываются в каждом цикле, заставляя их указывать на последнее представление и TextView.

Попробуйте изменить код на:

final View v=li.inflate(R.layout.addit, null);
final TextView t=(TextView) v.findViewById(R.id.a1);
0 голосов
/ 03 января 2012

Пожалуйста, сделайте следующее.

     edit_ll = (LinearLayout) findViewById(R.id.EditLinearLayout);

     addEditText();

     private void addEditText() {

        LayoutInflater li = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
        for(int i = 0; i < 3; i++) {
            View v = li.inflate(R.layout.addit, null);
            EditText e = (EditText) v.findViewById(R.id.e1);
            e.addTextChangedListener(new TextWatcher() {

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

                }

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

                }

                public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                    // TODO Auto-generated method stub

                   System.out.println("--change--");
                }

            });
            edit_ll.addView(v);
        }


    }

Получает весь ediText на TextChangeListener. Попробуй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...