2015-08-09 52 views
1

我有一个搜索视图的操作栏,我有一个片段设置了选项菜单。在我的MainActivity SearchView工作正常,但在我的Fragment(我需要处理事件OptionMenuItem做一些事情),setHasOptionMenu后,然后SearchView无法正常工作。这里是我的代码错误在ActionBar中搜索查看

选项菜单中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在片段

@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); 
} 
+0

你能检查一下吗? http://stackoverflow.com/questions/31489109/android-searchview-in-toolbar/31490543#31490543,我给出了同样的答案 –

+0

谢谢@HirenPatel的答案,但我的问题不是这样的。我需要在MainActivity中使用searchView,而不是在Fragment中重新创建,因为我的“pager”和“adapter”无法在Fragment中调用。我不重新创建actionBar,我只设置了HashOptionMenu并使用onOptionsItemSelected。我不知道为什么我的所有选项都能正常工作,但只有我的SearchView无法输入。我尝试将日志消息放入SearchView的代码中,当我单击SearchView图标时(无需输入),它会返回消息。也许错误是我的“寻呼机”和“适配器”。我认为它不能在片段中被调用,但现在我不知道我会做什么 –

回答

0

这个作品!在Kotlin,如果你需要更多的帮助,请告诉我。

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 
}