[Android/Layout]ListView Search 기능 만들기

2021. 2. 8. 00:58Android/UI-UX 디자인

728x90
반응형

<구현 화면>

 

1. DogMainActivity.java 내에서 액션바 기능 넣어주기

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.activity_actionbar_search, menu);

  MenuItem menuItem = menu.findItem(R.id.action_search);
  searchView = (SearchView)menuItem.getActionView();
  searchView.setQueryHint("사료명으로 검색합니다.");
  searchView.setOnQueryTextListener(queryTextListener);

  return super.onCreateOptionsMenu(menu);
}

이 때 자꾸 searchview cannot be cast to android.widget.searchView 라는 오류가 났는데

기존 액션바에 검색 기능을 추가할 때

androidx.appcompat.widget.SearchViewandroid.widget.SearchView 로 바꿔주니 해결됐다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/menu_search"
        android:title="Search"
        android:orderInCategory="102"
        app:showAsAction="always"
        app:actionViewClass="android.widget.SearchView"/>    <!--이 부분 수정-->

</menu>

 

2. 일단 리스트에 넣은 데이터를 따로 복사해두고 거기서 꺼내오는 방법을 사용

// 검색창에 글자를 입력했을 때 실행코드
private SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
	@Override
	public boolean onQueryTextSubmit(String s) {
		DataList.clear();
		if (s.length() == 0)
			DataList.addAll(searchList);
		else {
			for (int i=0; i<searchList.size(); i++)
			{
				if(searchList.get(i).name.contains(s))
					DataList.add(searchList.get(i));
			}
		}

		adapter.notifyDataSetChanged();
		return false;
	}

	@Override
	public boolean onQueryTextChange(String s) {
		DataList.clear();
		if (s.length() == 0)
			DataList.addAll(searchList);
		else {
			for (int i=0; i<searchList.size(); i++)
			{
				if(searchList.get(i).name.contains(s))
					DataList.add(searchList.get(i));
			}
		}

		adapter.notifyDataSetChanged();
		return false;
	}
};

 

728x90
반응형