【问题标题】:Error SearchView in ActionBarActionBar 中的错误 SearchView
【发布时间】:2015-08-09 12:26:47
【问题描述】:

我有一个带有搜索视图的操作栏,我有一个带有选项菜单的片段集。在我的 MainActivity SearchView 工作正常,但在我的 Fragment (我需要处理事件 OptionMenuItem 做某事), setHasOptionMenu 然后 SearchView 不能工作。这是我的代码

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

【问题讨论】:

  • 你能检查一下吗? stackoverflow.com/questions/31489109/…,我也给出了答案
  • 感谢@HirenPatel 的回答,但我的问题不是那样的。我需要在 MainActivity 中使用 searchView,而不是在 Fragment 中重新创建,因为我的“寻呼机”和“适配器”无法在 Fragment 中调用。我不重新创建 actionBar,我只 setHasOptionMenu 并使用 onOptionsItemSelected。我不知道为什么我的所有选项项目都可以正常工作,但只有我的 SearchView 不能接受输入。我尝试将日志消息放入 SearchView 的代码中,当我单击 SearchView 图标时它会返回消息(不接受输入)。也许错误是我的“寻呼机”和“适配器”。我认为它不能在 Fragment 中调用,但现在我不知道我会做什么

标签: android android-fragments android-actionbar searchview


【解决方案1】:

这行得通!在 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
}

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 2023-04-04
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多