1

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);  
}
Ken Kem
  • 635
  • 1
  • 6
  • 13
  • Can you please check this ? http://stackoverflow.com/questions/31489109/android-searchview-in-toolbar/31490543#31490543 , I had given answer for the same – Hiren Patel Aug 09 '15 at 16:03
  • Thank @HirenPatel for answers but my problem not like that. I need to use searchView in MainActivity, not recreate in Fragment because my "pager" and "adapter" can't call in Fragment. I don't recreate actionBar, I only setHasOptionMenu and use onOptionsItemSelected. I don't know why my all option Items work fine but only my SearchView can't taking input. I try to put Log message into SearchView's code and it's return message when I click on SearchView icon (without taking input). Maybe error is my "pager" and "adapter". I think it can't be called in Fragment but now I don't know what I will do – Ken Kem Aug 09 '15 at 19:00

1 Answers1

0

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
}
Emmanuelguther
  • 1,039
  • 4
  • 19
  • 29