Метод setText не работает для editText в списке после вызова «notifyDataSetChanged»

Я разрабатываю приложение для Android, используя eclipse. У меня есть список, и каждая его строка содержит EditText. Когда я нажимаю на EditText, я хочу сделать две вещи.

1: перезагрузить весь EditText текстами из моего массива данных.

2: Установите текст нажатого EditText в постоянную строку (скажем, «0»).

Для этого я использовал приведенный ниже onclicklisetner для EditText.

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        adapter.notifyDataSetChanged();//adapter is my arrayadapter of the listview
        EditText clickedText = (EditText)v;  
        clickedText.setText("0");
       }
 });

Как вы можете видеть, я использую метод notifyDataSetChanged для перезагрузки EditTexts в списке и метод setText, чтобы установить для щелкнутого текста EditText значение «0».

Но метод setText не работает. Если я прокомментирую строку «adapter.notifyDataSetChanged()», метод «setText» будет работать.

Я также пытался сделать это, вызвав метод setText после задержки (чтобы проверить, запускает ли notifyDataSetChanged новый поток), но потерпел неудачу.

Как я могу заставить оба метода работать в моем методе onClick.

Заранее спасибо.


person jjpp    schedule 11.02.2013    source источник


Ответы (2)


Вы можете сделать это, используя другой подход.

Возможно, вы настраиваете адаптер ListView с помощью ArrayList say mList.

Теперь в прослушивателе onItemClick представления списка вы получаете позицию элемента, щелкнутого в ListView. В onClick() установите значение 0 в этой позиции списка массивов, например, mList.set(position, 0). а затем вызовите notifyDataChanged()

person pvn    schedule 11.02.2013
comment
Я не могу этого сделать. Если пользователь не ввел правильное значение в текстовое поле, массив не должен изменяться. Я хочу установить текст только тогда, когда пользователь нажимает на текстовое поле. - person jjpp; 11.02.2013
comment
@jjpp Просто в onClick() проверьте, правильно ли установлено текстовое поле, и измените список массивов, только если он был установлен правильно. - person pvn; 11.02.2013
comment
Если при правильной настройке textView вы имеете в виду только целые числа, вы можете установить свойство TextView, чтобы можно было вводить только целые числа - person pvn; 11.02.2013

пытаться :

Таким образом, причина такого поведения заключается в том, что когда вы вызываете adapter.notifyDataSetChanged(), есть большая вероятность, что ваш View V будет переработан, поэтому он больше не ссылается на тот, по которому щелкнули. Что вы действительно хотите сделать, так это изменить список, чтобы при вызове notifyDataSetChanged все значения загружались соответствующим образом.

Поделитесь, пожалуйста, кодом адаптера.

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        //adapter is my arrayadapter of the listview
        //EditText clickedText = (EditText)v;  
        //clickedText.setText("0");

         //Do some thing to change the adapter data list.
         adapter.notifyDataSetChanged();
       }
 });
person Nimish Choudhary    schedule 11.02.2013