Search code examples
androidsearchview

How to access SearchView children?


I am trying to access EditText field of SearchView (v7) inside my application but I am always ending up at null pointer exception. So far I've tried a solution and tried to access the EditView using android:id/search_plate , R.id.search_plate, R.id.search_src_text and android:id/search_src_text but all in vain.

Code:

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.frag_menu_items, menu);

        MenuItem menuItem = menu.findItem(R.id.action_search);
        searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
        searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        searchPlate = (EditText) searchView.findViewById(searchPlateId);
        searchPlate.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
        searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    ToastClass.getInstance().showCustomMsg(getActivity(),searchPlate.getText().toString());
                }
                return false;
            }
        });


        //searchView.setOnQueryTextListener(this);
        MenuItemCompat.setOnActionExpandListener(menuItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                // Do something when collapsed
              //  Toast.makeText(getActivity(),"collapsed",Toast.LENGTH_LONG).show();
                searchMeta.setVisibility(View.GONE);
                return true;  // Return true to collapse action view
            }

            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                // Do something when expanded
               // Toast.makeText(getActivity(),"expanded",Toast.LENGTH_LONG).show();
                searchMeta.setVisibility(View.VISIBLE);
                return true;  // Return true to expand action view
            }
        });

        super.onCreateOptionsMenu(menu,inflater);

    }

Solution

  • I am trying to access EditText field of SearchView (v7) inside my application.

    You can do it with Java code.

    For android.support.v7.widget.SearchView:

    
        EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    
    

    For android.widget.SearchView:

    
        EditText editText = (EditText) searchView.findViewById(android.R.id.search_src_text);