android - SearchView getActionView लौटाने वाला दृश्य




android-searchmanager android-support-library (6)

आज मुझे पता चला कि मुझे getActionView () में उन वस्तुओं पर कॉल करना बंद कर दिया गया है, जिनके पास नहीं था:

android:showAsAction="always"

ऐसा लगता है कि अन्यथा वे सही ढंग से नहीं फुलाते।

यह कुछ दिन पहले काम कर रहा था, लेकिन अचानक यह बंद हो गया। मैं केवल एक्शन बार खोज विजेट का उपयोग करना चाहता हूं जब कुछ टुकड़ा दिखाई देता है।

अब मैं SearchView प्राप्त करने में असमर्थ SearchView , अब getActionView हमेशा शून्य रहता है।

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="@string/search_for_places">
</searchable>

Manifest.xml

<activity
    android:name=".ui.activities.MainActivity"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
        <action android:name="android.intent.action.SEARCH"/>
    </intent-filter>
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable"/>
    <meta-data
    android:name="android.app.default_searchable"
    android:value=".ui.activities.MainActivity" />
</activity>

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search_place"
        android:icon="@drawable/ic_2_action_search"
        android:orderInCategory="1"
        android:title="@string/title_search"
        myapp:showAsAction="collapseActionView|ifRoom"
        myapp:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>

टुकड़ा

...
setHasOptionsMenu(true);
...



@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search_place);
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE);
    if (mSearchView != null) {
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
        mSearchView.setIconifiedByDefault(true);
        mSearchView.setOnQueryTextListener(this);
    }
    super.onCreateOptionsMenu(menu, inflater);
}

आज मुझे वही समस्या थी और मुझे लगता है कि मैंने इसे हल कर दिया है। यह पता चला है कि मैंने कुछ ऐसे काम किए, जो ActionBarCompat अनुबंध के अनुसार बिल्कुल नहीं थे:

  • ActionBarCompat का उपयोग करने वाली प्रत्येक गतिविधि को सीधे FragmentActivity बजाय ActionBarActivity विस्तार करना चाहिए
  • ActionBarCompat का उपयोग करने वाली प्रत्येक गतिविधि को ActionBarCompat विषयों से विरासत के रूप में अपनी थीम घोषित करनी चाहिए।

उन दोनों को मैंने Google का स्पष्टीकरण वीडियो देखा

अब मेरा खोज searchView null नहीं है।


मेरे लिए निम्नलिखित समाधान काम किया:

<?xml version="1.0" encoding="utf-8"?>
<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.dev.ttburger.conttagem.BuscarProdutoActivity">
    <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Buscar"
        app:showAsAction="always"   
        app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>

में बदलो:

<?xml version="1.0" encoding="utf-8"?>
<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.dev.ttburger.conttagem.BuscarProdutoActivity">
    <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Buscar"
        app:showAsAction="always"   
        app:actionViewClass="android.SearchView"/>
</menu>

मैं उसी त्रुटि के साथ था। और मैंने निम्नलिखित चीजें बनाई हैं:

मेरे पास FragmentActivity द्वारा फैली एक गतिविधि है:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.feed, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
            .getActionView();
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));

    return true;
}

Searchable.xml:

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

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="br.com.srtorcedor.FeedActivity">

    <item android:id="@+id/action_search"
        android:icon="@drawable/abc_ic_search"
        android:title="@string/search_title"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView"/>

</menu>

AndroidManifest:

  <activity
        android:name=".FeedActivity"
        android:icon="@drawable/ic_action_pins"
        android:label="@string/title_activity_feed">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

क्या आप जाँच सकते हैं कि यह आपके साथ काम करता है?


मैंने इसे भी जोड़ा:

setHasOptionsMenu(true);

इसके और @maxandron जवाब के साथ काम करना


यदि आप इसका उपयोग कर रहे हैं तो इसका संभावित उत्तर है: https://code.google.com/p/android/issues/detail?id=58508

संक्षेप में, अपने प्रॉपर कॉन्फिगर फ़ाइल proguard-rules.pro नीचे की रेखा जोड़ें।

-keep class android.support.v7.widget.SearchView { *; }




android-support-library