2013-02-11 5 views
0

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

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 в ListView и метод «SetText», чтобы установить щелкнул текст EditText на «0».

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

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

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

Спасибо заранее.

ответ

0

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

Возможно, вы настроили адаптер ListView, используя ArrayList, скажем, mList.

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

+0

Я не могу этого сделать. Если пользователь не вводит правильное значение в текстовое поле, массив не должен изменяться. Я хочу установить текст только тогда, когда пользователь нажимает на текстовое поле. – jjpp

+0

@jjpp Простой в onClick() проверяет, правильно ли был установлен текстовый фильтр, и измените массивList только в том случае, если он был установлен правильно – pvn

+0

В случае, если в правильной настройке textView вы имеете в виду только целые числа, тогда вы можете установить свойство TextView таким образом что можно ввести только целые числа – pvn

0

попробовать:

Так что причина такого поведения является то, что при вызове 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(); 
     } 
});