2015-05-26 22 views
7

Próbuję dodać SearchView na moim pasku narzędzi, dodałem ikonę, ale kiedy ją wciskam, nie rozwija się.Android - SearchView w pasku narzędzi nie rozwija się

Oto kod:

main_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.app.try.MainActivity"> 
    <item 
     android:id="@+id/search" 
     android:title="@string/search" 
     android:icon="@drawable/abc_ic_search_api_mtrl_alpha" 
     app:showAsAction="always" 
     android:actionViewClass="android.support.v7.widget.SearchView"/> 
</menu> 

MainActivity.java

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater=getMenuInflater(); 
     inflater.inflate(R.menu.menu_main,menu); 

     MenuItem searchItem = menu.findItem(R.id.search); 
     SearchManager searchManager= (SearchManager)getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView=null; 
     if (searchItem!=null) { 
      Log.d("createOptionMenu","search item not null"); 
      searchView = (SearchView) searchItem.getActionView(); 
     } 

     if (searchView!=null) { 
      Log.d("createOptionMenu","search view not null"); 
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     }else{ 
      Log.e("createOptionMenu","search view null"); 
     } 



     return true; 
    } 

(to zawsze pojawia się komunikat dziennika "view wyszukiwania null")

AndroidManifest.xml

... 
<activity 
      android:name=".MainActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 

      <meta-data 
       android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 
     </activity> 

     <activity 
     android:name=".SearchResultActivity" 
     android:label="@string/title_activity_search_result" > 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
... 

searchable.xml

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="HINTTT" /> 

Próbowałem wielu opcji, jak użycie expandActionView() lub setIconified(false), lecz nie tych prac dla mnie.

+0

Czy importowanie poprawną klasę. to jest android.support.v7.widget.SearchView w działaniu? Nie włączaj Android.widget.SearchView w aktywności, jeśli korzystasz z appcompat searchVIew. – shubendrak

+0

@Shubendra Importowałem 'andorid.widget.SearchView' zamiast' android.support.v7.widget.SearchView', ale zmieniłem go i nadal nie działa – Doruko

Odpowiedz

23

Należy użyć MenuItemCompat

mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

i zawaleniem SearchView używać

MenuItemCompat.collapseActionView(searchItem); 

i upewnij się, że zostały zmienione android:actionViewClass do app:actionViewClass

+0

Próbowałem go, wciąż nie działa, a komunikat dziennika wciąż pokazuje, że searchView ma wartość null – Doruko

+18

użyj aplikacji : actionViewClass zamiast android: actionViewClass –

+0

to wszystko !! wielkie dzięki! – Doruko

-2

W główną działalność trzeba rozciąga ActionbarActivity

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:appcompat="http://schemas.android.com/apk/res-auto" 
xmlns:app="http://schemas.android.com/tools"> 

<item 
    android:id="@+id/menu_search" 
    android:title="@string/menu_search" 
    appcompat:actionViewClass="android.support.v7.widget.SearchView" 
    appcompat:showAsAction="always"/> 

MainActivity.java

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    // Inflate menu to add items to action bar if it is present. 
    inflater.inflate(R.menu.menu_main, menu); 
    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

}

1

miałem ten sam problem. Właśnie rozwiązałem moje, wykonując drobne poprawki. zmienić android:actionViewClass="android.support.v7.widget.SearchView"

do app:actionViewClass="android.support.v7.widget.SearchView"

Powiązane problemy