안드로이드 SearchView

조회수 3891회

프레그먼트 안에서 액션바에 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)

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

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

    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 알 수 없는 사용자 2016.10.18 00:57
    • 이렇게 extend 시켜도 정상작동이 되나요?? 저도 잘 되다가 저렇게 바꾼 뒤부터 작동을 안해서요 ㅠㅠ 알 수 없는 사용자 2016.10.18 01:01
    • 네, android.support.v4.app.Fragment를 상속받고 있고, 정상적으로 동작합니다. 알 수 없는 사용자 2016.10.18 01:09
    • 제가 빼먹은게 있었네요 ㅠㅠ 감사합니다! 알 수 없는 사용자 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>
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 되어있습니다ㅠㅠ 그런데도 널포인트가 뜨네요.. 알 수 없는 사용자 2016.10.17 22:16
    • 특별히 동작이 안될만한 부분은 없어보이는데 이상하네요. 제가 테스트 한 코드 답변으로 추가했습니다. 알 수 없는 사용자 2016.10.18 00:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)