본문 바로가기
Android

[Android] EditText에서 글자를 바꿀 때 마다 기능 실행: TextWatcher, addTextChangedListener

by eyoo 2022. 7. 18.

먼저 데이터 베이스의 정보를 검색하는 함수를 만들기 위해 DatabaseHandler에서 작업한다.

 

// 메모 검색하는 함수
public ArrayList<Memo> searchMemo (String keyword){
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.rawQuery("select * from memo where title like '%"+keyword+"%' or content like '%"+keyword+"%'",null);

    ArrayList<Memo> memoList = new ArrayList<Memo>();

    if(cursor.moveToFirst()){
        do{
            Memo memo = new Memo(cursor.getInt(0),cursor.getString(1), cursor.getString(2));
            memoList.add(memo);
        } while(cursor.moveToNext());
    }

    return memoList;
}

 

 

그 후 메인에서 서치 바 (검색창)에 addTextChangedListener에 TextWatcher를 적용시켜서 오버라이드 한다.

 

editSearch.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {


    }
});

 

 

검색창에 2개 이상의 단어를 입력했을때 바로 검색하여 해당 카드뷰를 보여주도록 하자.

 

editSearch.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        // 키워드를 쓸때마다 자동으로 해당 검색어를 가져와서 디비에서 쿼리해서 검색결과 화면에 표시
        String keyword = editSearch.getText().toString().trim();

        if (keyword.length()>=2){
            DatabaseHandler db = new DatabaseHandler(MainActivity.this);
            memoList = db.searchMemo(keyword);
            adapter = new MemoAdapter(MainActivity.this, memoList);
            recyclerView.setAdapter(adapter);
            db.close();
        }

    }
});

# 글자가 모두 써진 후 실행되도록 afterTextChanged에서 작업했다.

 

 

잘 실행되는것을 확인할수있다.

 

 

글자를 지울때 마다 네트워크에서 데이터를 가져올때는 onTextChanged에서  코드를 작성한다.

 

editSearch.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if( charSequence.length() == 0 ){
            keyword = "";
            getNetworkData();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

 

 

 

 

 

 

댓글