안드로이드 SearchView


프레그먼트 안에서 액션바에 searchView를 구현하고 있습니다. 원래 작동이 잘 되었었는데 public class Fragment1 extends android.support.v4.app.Fragment {}

다른 작업 때문에 v4로 extends 한 뒤로는 오류가 납니다 제가 사용한 searchView 위젯은 android.supprot.v7.widget 입니다

MenuItem item = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) item.getActionView();

item.getActionView에서 널포인터익셉션 오류가 납니다.

java.lang.NullPointerException: Attempt to invoke interface method 'android.view.View android.view.MenuItem.getActionView()' on a null object reference at com.example.user.seoulapp.Fragment1.onCreateOptionsMenu(Fragment1.java:132)

해결방법이 어떻게 될까요..?

  • 2016년 10월 17일에 작성됨
    대학생입니다.

  • MenuItemCompat.getActionView(item) 혹시 해보셨나요?    Junyoung Heo   2016.10.17 00:33     
조회수 167


2 답변


좋아요
1
싫어요
채택취소하기

오히려 간단한 부분이라 뭔가 빠트리지 않았을까 싶은데요. 일단 제가 테스트한 코드 추가했습니다. 코드를 비교하면서 다시 한번 살펴보는게 좋을 것 같습니다

search_menu.xml

<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="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
</menu>

SearchViewFragment.java

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_search_view, container, false);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolBar);
    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.search_menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }
        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });
}

결과

이미지

검색, 클릭 시 이미지


  • 혹시 프레그먼트에 public class Fragment1 extends android.support.v4.app.Fragment    zzsu   2016.10.18 00:57     
  • 이렇게 extend 시켜도 정상작동이 되나요?? 저도 잘 되다가 저렇게 바꾼 뒤부터 작동을 안해서요 ㅠㅠ    zzsu   2016.10.18 01:01     
  • 네, android.support.v4.app.Fragment를 상속받고 있고, 정상적으로 동작합니다.    한로니로니   2016.10.18 01:09     
  • 제가 빼먹은게 있었네요 ㅠㅠ 감사합니다!    zzsu   2016.10.18 02:16     

메뉴 xml에서 app:actionViewClass가 설정이 되어있는지 확인해보시기 바랍니다. 만일 프리픽스가 android:actionViewClass로 되어 있다면 NullPointerException이 발생할 수 있습니다. 아래 코드를 참고하셔서 수정해보세요.

<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="@android:drawable/ic_menu_search"
        android:title="@string/search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
</menu>

  • 되어있습니다ㅠㅠ 그런데도 널포인트가 뜨네요..    zzsu   2016.10.17 22:16     
  • 특별히 동작이 안될만한 부분은 없어보이는데 이상하네요. 제가 테스트 한 코드 답변으로 추가했습니다.    한로니로니   2016.10.18 00:06     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close