2012-06-24 3 views
0

У меня есть простой список с TextView и Editview, который заполняется с помощью SimpleCursorAdapter из SQLITE-запроса. Я пытаюсь выяснить, когда пользователь оставил EditView, чтобы я мог выполнить некоторую простую проверку и обновить базу данных. Я пробовал несколько способов, предложенных в других публикациях, чтобы сделать это, но я не могу поймать событие. Ниже приводится два разных способа, которыми я пытался это сделать. Пожалуйста помоги. Буду весьма признателен за это.android EditText с изменением обнаружения ListView

private void showClasses(Cursor cursor) { 


    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.classrow, cursor, FROM, TO); 

    setListAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

       //ATTEMPT 1  
    for (int i = 0; i < adapter.getCount(); i++){ 
     EditText et = (EditText) adapter.getView(i, null, null).findViewById(R.id.classpercentage); 


     et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 

     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      Log.d("TEST","In onFocusChange"); 

     } 
    }); 

     //METHOD 2 
     et.addTextChangedListener(new TextWatcher(){ 
     public void afterTextChanged(Editable s) { 
      Log.d("TEST","In afterTextChanged"); 

     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after){Log.d("TEST","In beforeTextChanged");} 
     public void onTextChanged(CharSequence s, int start, int before, int count){Log.d("TEST","In onTextChanged");} 
    }); 



    } 
} 

Я ничего не вижу в LogCat, и мои точки останова в отладчике не попадают.

ответ

0

Вид, который вы получаете от getView, не завышен в ListView, поэтому ваш TextWatcher не работает должным образом. Чтобы он работал, вы должны создать свой собственный адаптер. Например

public class MySimpleCursorAdapter extends SimpleCursorAdapter { 
    public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
     super(context, layout, c, from, to, flags); 
    } 

    @Override 
    public View getView(int pos, View v, ViewGroup parent) { 
     v = super.getView(pos, v, parent); 
     final EditText et = (EditText) v.findViewById(R.id.classpercentage); 
     et.addTextChangedListener(new TextWatcher() { 
      public void afterTextChanged(Editable s) { Log.d("TEST", "In afterTextChanged"); } 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.d("TEST", "In beforeTextChanged"); } 
      public void onTextChanged(CharSequence s, int start, int before, int count) { Log.d("TEST", "In onTextChanged"); } 
     }); 
     return v; 
    } 
} 

а затем метод будет изменен на этот

private void showClasses(Cursor cursor) { 
    SimpleCursorAdapter adapter = new MySimpleCursorAdapter(this, R.layout.classrow, cursor, FROM, TO); 
    setListAdapter(adapter); 
} 
Смежные вопросы