군침이 싹 도는 코딩

안드로이드 스튜디오 검색 기능 구현 ( addTextChangedListener, TextWatcher ) 본문

Android

안드로이드 스튜디오 검색 기능 구현 ( addTextChangedListener, TextWatcher )

mugoori 2023. 2. 2. 17:48
public ArrayList<Memo> SearchMemo(String keyword) {
    //1. 데이터베이스를 가져온다.
    SQLiteDatabase db = this.getReadableDatabase();

    //2. 쿼리문 만든다.
    String query = " select * from memo where content like '%" + keyword + "%' or title like '%" + keyword + "%' " ;

    //3. 쿼리문을 실행하여, 커서로 받는다.
    Cursor cursor = db.rawQuery(query,null);

    //3-1.여러 데이터를 저장할 어레이리스트를 만든다.
    ArrayList<Memo> memoArrayList = new ArrayList<>();
    //4. 커서에서 데이터를 뽑아낸다.
    if(cursor.moveToFirst()){
        do {

            int id =cursor.getInt(0);
            String title = cursor.getString(1);
            String content = cursor.getString(2);


            // 이 데이터를,화면에 표시하기 위해서는
            // 메모리에 전부 다 남아있어야 한다.

            Memo memo = new Memo(id,title,content);
            memoArrayList.add(0,memo);

        }while(cursor.moveToNext());
    }

    db.close();

    return memoArrayList;

}

# DatabaseHandler 클래스 코드

먼저 디비에서 검색해서 가져오는 함수를 만들어준다

 

 

 

imgSearch.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String keyword = editSearch.getText().toString().trim();
        if (keyword.isEmpty()){
            return;
        }

        DatabaseHandler db = new DatabaseHandler(MainActivity.this);
        memoList = db.SearchMemo(keyword);
        db.close();
        adapter = new MemoAdapter(MainActivity.this,memoList);
        recyclerView.setAdapter(adapter);




    }
});

imgDelete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        editSearch.setText("");
        DatabaseHandler db = new DatabaseHandler(MainActivity.this);
        memoList = db.getAllMemos();
        adapter = new MemoAdapter(MainActivity.this,memoList);
        recyclerView.setAdapter(adapter);


    }
});

# MainActivity 클래스 코드

이미지를 눌러서 검색기능을 구현한 코드이다

디비를 생성하고 서치 메소드를 리스트에 저장하고 

디비를 닫고 어댑터로 리사이클러뷰를 연결한다

 

 

 

# 해당 기능으로하면 이미지를 눌러야 검색을 할 수 있다

이것을 좀 더 개선해서 검색어를 입력만하면 결과를 나오게 할 수 있다

 

 

 

        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();

                // 2글자 이상 입력했을대만 검색이 되도록 한다
                if (keyword.length() < 2 && keyword.length() > 0 ){
                    return;
                }

                // 디비에서 가져오기
                DatabaseHandler db = new DatabaseHandler(MainActivity.this);
                memoList = db.SearchMemo(keyword);
                db.close();

                // 화면에 보여주기
                adapter = new MemoAdapter(MainActivity.this,memoList);
                recyclerView.setAdapter(adapter);


            }
        });

# MainActivity 클래스 코드

editText 기능중 addTextChangedListener 를 사용한다

안에 메소드중 afterTextChanged 에 키워드를 받아주고

데이터베이스를 만든 뒤 검색 함수를 사용하고 리사이클러뷰를 연결해주면 된다

 

 

 

# 버튼을 누르지 않아도 바로 갱신이 된다