EditText теряет содержимое при прокрутке в ListView

У меня есть элемент списка с EditText в нем, я не знаю, сколько там будет элементов. У меня проблема, когда я ввожу текст в EditText, а затем прокручиваю вниз ListView, после того как я прокрутил вверх, в моем первом EditText нет текста, или есть текст из другого EditText из ListView.

Я пробовал TextWatcher, и сохранение данных в массив, но проблема в том, что возвращаемая позиция представления в ListView не всегда правильная, поэтому я потерял некоторые данные из массива. -.-

Как определить правильную позицию представления в ListView?

Например:

Если у меня 10 элементов в ListView, и только 5 из них видны в данный момент. Адаптер возвращает позицию от 0 до 4... это нормально. Когда я прокручиваю вниз, позиция элемента 6 становится 0...wtf? и я теряю данные из массива на позиции 0 :)

Я использую ArrayAdapter.

Пожалуйста, помогите.

Вот код:

public View getView(int position, View convertView, ViewGroup parent) {

    tmp_position = position;

    if (convertView == null) {

        holder = new ViewHolder();

        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate(R.layout.element_in_game, null);

        holder.scoreToUpdate = (EditText) convertView
                .findViewById(R.id.elementUpdateScore);

        holder.scoreToUpdate.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                scoresToUpdate[tmp_position] = s.toString();
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        initScoresToUpdateEditTexts(holder.scoreToUpdate, hint);

        convertView.setTag(holder);

    } else {

        holder = (ViewHolder) convertView.getTag();

        holder.scoreToUpdate.setText(scoresToUpdate[tmp_position]);

    }

    return convertView;
}
12
задан tidbeck 19 January 2012 в 11:11
поделиться