2014-11-02 98 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; 
       } 
      });