如何访问 SearchView 子项?

How to access SearchView children?

我试图在我的应用程序中访问 SearchView (v7)EditText 字段,但我总是以空指针异常结束。 到目前为止,我已经尝试了一种解决方案,并尝试使用 android:id/search_plateR.id.search_plateR.id.search_src_textandroid:id/search_src_text 访问 EditView,但都是徒劳的。

代码:

 @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);

    }

试试这个

searchView = (SearchView) menu.findItem(R.id.search_plate).getActionView();

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

您可以使用 Java 代码来完成。

对于android.support.v7.widget.SearchView


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

对于android.widget.SearchView


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