Error SearchView in ActionBar

本小妞迷上赌 提交于 2019-12-11 08:33:01

问题


I have a Action Bar with Search View and I have a Fragment set has Option Menu. In my MainActivity SearchView work fine but in my Fragment (I need handle event OptionMenuItem to do something), after setHasOptionMenu then SearchView can't work. Here is my code

Option Menu in MainActivity

public boolean onCreateOptionsMenu(Menu menu) {  
    getMenuInflater().inflate(R.menu.main, menu); 
    // Create SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSubmitButtonEnabled(false);
    searchView.setQueryHint("Search Here");
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {        
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            if(s.length() > 0){
                Tab1.listadaptor.getFilter().filter(s);
                Tab2.listadaptor.getFilter().filter(s);
            }else{
                pager.setAdapter(adapter);
                if(SlidingTabLayout.userState){
                    pager.setCurrentItem(0);
                }else{
                    pager.setCurrentItem(1);
                }
            }
            return true;
        }
    };
    searchView.setOnQueryTextListener(queryTextListener);
    return super.onCreateOptionsMenu(menu);
}

OptionMenuItem in Fragment

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
    //Do Something

    }
    return super.onOptionsItemSelected(item);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);  
}

回答1:


This works!! is in Kotlin, if you need more help, say me.

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    super.onCreateOptionsMenu(menu)
    val inflater = menuInflater
    inflater.inflate(R.menu.search_activity_menu, menu)
    searchView = menu.findItem(R.id.btn_search_station).actionView as 
    SearchView
         return true

}

private fun setErrorOnSearchView(searchView: SearchView, errorMessage: String) {
    val id = searchView.context
            .resources
            .getIdentifier("android:id/search_src_text", null, null)
    val editText = searchView.find<EditText>(id)
    editText.error = errorMessage
}

private fun cleanErrorOnSearchView(searchView: SearchView) {
    val id = searchView.context
            .resources
            .getIdentifier("android:id/search_src_text", null, null)
    val editText = searchView.find<EditText>(id)
    editText.error = null
}


来源:https://stackoverflow.com/questions/31904205/error-searchview-in-actionbar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!