2014-11-02 104 views
2

“错误”好奇怪的其他时候,我已经做到了,从来没有略去这个问题...搜索查看不叫onOptionsItemSelected

我搜索查看不叫onOptionsItemSelected如果我把“应用程序的名字:actionViewClass =” android.support.v7 .widget.SearchView”菜单上。

清单

<uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 
<activity 
      android:name=".DashBoardActivity" 
      android:label=""> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

dash_board.xml(菜单)(如果我退actionViewClass他叫(onOptionsItemSelected),但如果我把他不调用)

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:appname="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.example.servic.DashBoardActivity" > 


      <item android:id="@+id/action_search" 
      android:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      appname:showAsAction="always" 
      appname:actionViewClass="android.support.v7.widget.SearchView"/> 

      <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:title="@string/action_settings" 
     appname:showAsAction="always"/> 



</menu> 

DashBoardActivity

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.dash_board, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 

     int id = item.getItemId(); 
     switch (id) 
     { 
     case R.id.action_search: 
      mSearchView 
      .setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 
       @Override 
       public void onFocusChange(View v, boolean hasFocus) { 
        if (hasFocus) { 
         ToastMensagem("Digite um endereço."); 
        } else { 
         BuscarEndereco(mSearchView.getQuery().toString()); 
        } 
       } 



      }); 
      break; 
     } 


     return super.onOptionsItemSelected(item); 
    } 

的错误是,无法调用onOptionsItemSelected,我需要操纵搜索查看

+0

你实际上并没有告诉我们你有什么错误... – 2014-11-02 18:24:08

回答

11

我知道它现在太晚了,但我还是写答案,如果任何人发现它在未来有帮助。 昨天我来到同样的问题,我通过更改下面一行在菜单的xml文件

appname:showAsAction="always" 

appname:showAsAction="always|collapseActionView" 

你必须在appname:showAsAction添加collapseActionViewalways一起上搜索查看启用onOptionsItemSelected解决它

+0

哦,谢谢!它解决了我的问题。 – Maga 2015-09-03 12:26:21

+0

天啊!这为我解决了整个事情! WTF?它为什么有效?我曾尝试过'ifRoom'和'always',但只有'always | collapseActionView'起作用。请任何解释? – user3734429 2015-09-21 15:25:12

+0

其2016年9月和这个问题仍然存在,感谢解决方案! – Sherlock 2016-09-01 03:54:17

0

每当我将collapseActionView添加到菜单项时,操作栏标题将隐藏在搜索视图中单击。这就是为什么我正在寻找一种方式来把它作为

android:showAsAction="always"

与onOptionsItemSelected的funcionality的原因。如果有人发现任何东西,请告诉我! :)

0

只是要注意,提交的搜索结果,你不应该使用SearchView.setOnQueryTextFocusChangeListener

它应该被用来代替SearchView.setOnQueryTextListener

下面是搜索提交监听器的例子:

 case R.id.action_search: 
      mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

       @Override 
       public boolean onQueryTextSubmit(String query) { 
        Toast.makeText(getActivity(), 
          getString(R.string.abc_searchview_description_submit), 
          Toast.LENGTH_SHORT) 
          .show(); 
        updateUI(query); 
        return true; 
       } 

       @Override 
       public boolean onQueryTextChange(String query) { 
        // Clear search 
        if (query.equals("")) { 
         updateUI(null); 
        } 
        return true; 
       } 
      });