1

I have been trying to implement a simple search widget and it isn't working. I have been searching for answers and have come across many posts, but no answers have helped me. The app will run, but the search bar will not appear. Here are some of the resources that I have come across:

Here is my code:

MainActivity.java

package example.search.coco.mysearchapp;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.widget.SearchView;
import android.view.Menu;


public class MainActivity extends Activity {

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

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

        // Associate searchable configuration with the SearchView
        //String pkg = "example.search.coco.mysearchapp";
        //String cls = "example.search.coco.mysearchapp.search.SearchActivity";
        //ComponentName mycomponent = new ComponentName(pkg,cls);
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        return true;
    }
}

SearchActivity.java

package example.search.coco.mysearchapp;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;

public class SearchResultsActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        handleIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {

        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            //use the query to search your data somehow
        }
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

options_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search"
        android:title="@string/search_title"
        android:icon="@drawable/ic_search"
        myapp:showAsAction="collapseActionView|ifRoom"
        myapp:actionViewClass="android.widget.SearchView" />
</menu>

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_hint" />

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.search.coco.mysearchapp" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <meta-data android:name="android.app.default_searchable"
            android:value="example.search.coco.mysearchapp.SearchResultsActivity" />
        </activity>

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

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

    </application>

</manifest>

Source Code

I have been trying different things the past couple days, but cannot seem to get it to work. Please help!

Community
  • 1
  • 1

2 Answers2

0

Change your this line

 myapp:showAsAction="collapseActionView|ifRoom" 

as

 myapp:showAsAction="always"
Cüneyt
  • 2,565
  • 25
  • 31
0

It happened to me once when in layout.xml the AppTheme configured with NoActionBar.

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

changed to

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

And it worked.

Avi L
  • 1,558
  • 2
  • 15
  • 33