군침이 싹 도는 코딩
안드로이드 스튜디오 검색 기능 구현 ( addTextChangedListener, TextWatcher ) 본문
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 에 키워드를 받아주고
데이터베이스를 만든 뒤 검색 함수를 사용하고 리사이클러뷰를 연결해주면 된다
# 버튼을 누르지 않아도 바로 갱신이 된다
'Android' 카테고리의 다른 글
안드로이드 네트워크 통신 권한 설정 및 에뮬레이터 테스트 설정 (0) | 2023.02.03 |
---|---|
안드로이드 스튜디오 깃허브 연동하기 (0) | 2023.02.03 |
다른 액티비티로 데이터 전달 시 클래스의 객체를 전달하는 방법 ( Serializable, putExtra() , getSerializableExtra() ) (0) | 2023.02.01 |
리사이클러뷰에서 몇 번째 행을 눌렀는지 알 수 있는 어댑터의 함수 ( getAdapterPosition() ) (0) | 2023.02.01 |
리사이클러뷰 어댑터에서 새로운 액티비티 실행하는 방법 (0) | 2023.02.01 |