2012-05-25 7 views
0

У меня есть приложение для Android с адаптером, который расширяет адаптер курсора.
Я переопределил методы bindView и newview для CursorAdapter. Каждая из моих строк ListView содержит EditText. Когда я ввожу какой-либо текст в EditText и прокручиваю ListView, содержимое текста EditText перемещается в другой EditText.
Может ли кто-нибудь помочь мне в сортировке этой проблемы, как предотвратить использование EditText из его содержимого при прокрутке списка ListView.Редактирование изменений в ListView Scroll


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


Вот код:

 private class AddScreenArrayAdapter extends ArrayAdapter<AddScreenItems>{ 

    ViewHolder viewHolder = null; 
    public String[] holder_values; 

public AddScreenArrayAdapter(Context context, int textViewResourceId, 
     List<AddScreenItems> objects) { 
    super(context, textViewResourceId, objects); 
    holder_values = new String[objects.size()]; 

    // TODO Auto-generated constructor stub 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.additem_row, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.label = (TextView) v.findViewById(R.id.label_add_item); 
     viewHolder.dbName=(TextView)v.findViewById(R.id.dbtable_name); 
     viewHolder.value = (EditText) v.findViewById(R.id.value_add_item); 
     viewHolder.value.addTextChangedListener(new TextWatcher() 
     { 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       holder_values[viewHolder.ref]= arg0.toString(); 

      } 

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

      } 

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

      } 

     }); 
     v.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) v.getTag(); 
    } 
    AddScreenItems addScreenItems = addScreenItemsList.get(position); 
    if(addScreenItems!=null) 
    { 
     viewHolder.label.setText(addScreenItems.labelname); 
     viewHolder.dbName.setText(addScreenItems.databaseTableName); 
    // viewHolder.ref = position; 
     if (holder_values[position] != null) 
     { 
      viewHolder.value.setText(holder_values[position]); 
     } 

     else { 
      viewHolder.value.setText(""); 
     } 


    } 
    return v; 


} 

    } 

      static class ViewHolder { 
    public TextView label; 
    public EditText value; 
    public TextView dbName; 
    int ref; 
     } 
+0

Возможно, это связано с тем, как вы обрабатываете переработку вида. Можете ли вы отправить свой метод getView() из адаптера? – MattDavis

+0

Только что написал мой код. – user1276092

ответ

0

Если у вас возникли проблемы после прокрутки это вид утилизации, который Мессинг вас. Вам в основном нужно настроить массив для хранения содержимого EditTexts, поэтому при прокрутке они не перепутаются.

Вот ссылка на другой ответ, который я дал по аналогичной теме. Это должно указывать вам путь. SO Answer

EDIT

Я использую setOnFocusChangeListener для запуска кода, когда пользователь заканчивает запись в поле EditText.

qty.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
@Override 
public void onFocusChange(View v, boolean hasFocus) { 
    if (!hasFocus) { 
     LinearLayout parent = (LinearLayout) v.getParent(); 
     EditText qtyTemp = (EditText) parent.findViewById(R.id.qty); 
     quantity[pos] = qtyTemp.getText().toString(); 
    } 
} 
}); 
+0

Я обновил свой код, так как я использовал ArrayAdapter вместо Cursor Adapter, но все еще сталкиваюсь с проблемой. Можете проверить мой код и помочь мне в решении проблемы. – user1276092

+0

Это выглядит хорошо для меня. У меня никогда не было большого успеха с TextWatchers, я обычно использую 'setOnFocusChangeListener', поэтому, когда пользователь убирает блок edittext, он переходит на работу. Я добавлю небольшой пример к моему ответу. – Barak

Смежные вопросы