2013-08-27 2 views
1

Я создал обычай ListView, который в каждой строке содержит TextView и EditText. Все работает отлично, но я просто не знаю, где я должен установить TextChangeListener на EditText, чтобы я мог установить/сохранить введенное значение. Вот мой код:Как добавить TextChangeListener в пользовательский ListView?

RowItem.java

public class RowItem { 

    private String title; 
    private String value; 

    public RowItem(String title, String value) { 
     this.title = title; 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

CustomList.java

public class CustomList extends ArrayAdapter<RowItem> { 

    Context context; 
    List<RowItem> items; 

    public CustomList(Context context, int resourceId, 
      List<RowItem> items) { 
     super(context, resourceId, items); 
     this.context = context; 
     this.items = items; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     TextView txtTitle; 
     EditText txtValue; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     RowItem rowItem = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.row_item, null); 
      holder = new ViewHolder(); 
      holder.txtTitle = (TextView) convertView.findViewById(R.id.textView1); 
      holder.txtValue = (EditText) convertView.findViewById(R.id.editText1); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.txtTitle.setText(rowItem.getTitle()); 
     holder.txtValue.setText(rowItem.getValue()); 

     return convertView; 
    } 
} 

Любое предложение?

ответ

2

Измените свой viewHolder, чтобы он содержал номер строки строки, на которую указывает.

private class ViewHolder { 
    TextView txtTitle; 
    EditText txtValue; 
    int rowNumber; 
} 

установить ROWNUMBER всегда

holder.txtValue.setText(rowItem.getValue()); 
holder.rowNumber = position; 

Добавьте свой пользовательский адаптер в качестве onFocusListener на EditText и получить ROWNUMBER отредактированного следующего кода.

void onFocusChanged(View v, boolean hasFocus) { 
    ViewHolder holder = (ViewHolder)v.getParentView().getTag(); 
    int rowNo = holder.rowNumber; 
    //do rest of the stuff like modifying the array list. 
} 

Однако я считаю, что это должно быть более легкое решение, чем это.

+0

Не могли бы вы немного рассказать о 'onFocusChanged'? –

+0

setOnFocusListener и View.OnFocusListener имеет дело с началом и окончанием фокуса, как Javascript. Когда редактируемый текст выполняется с редактированием, вызывается onFocusChanged. – Rajiv

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