2012-06-24 5 views
0

SQLite 쿼리의 SimpleCursorAdapter를 사용하여 채워지는 TextView와 Editview가있는 간단한 listview가 있습니다. 사용자가 EditView를 나간 시점을 파악하여 간단한 유효성 검사를 수행하고 데이터베이스를 업데이트 할 수 있도록 노력하고 있습니다. 나는 이것을하기 위해 다른 게시판에서 제안 된 몇 가지 방법을 시도했지만 이벤트를 잡을 수는 없습니다. 아래에 포함 된 두 가지 방법으로이 작업을 시도했습니다. 도와주세요. 나는 그것을 매우 감사 할 것이다.ListView가 변경되는 안드로이드 EditText

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); 
} 
로 수정됩니다
관련 문제