Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
384 views
in Technique[技术] by (71.8m points)

android - Create "history" to SearchView on ActionBar

I want to have history on my SearchView, I've been googling around, and the only sensible(?) tutorial I found was this, but that's just for like Gingerbread, not API>14.

Then I found this code:

String[] columnNames = {"_id","text"};
        MatrixCursor cursor = new MatrixCursor(columnNames);
        String[] array = {"Sn???lla", "bla bla bla", "J?vla piss"}; //if strings are in resources
        String[] temp = new String[2];
        int id = 0;
        for(String item : array){
            temp[0] = Integer.toString(id++);
            temp[1] = item;
            cursor.addRow(temp);
        }
        String[] from = {"text"};
        int[] to = {android.R.id.text1};
        CursorAdapter ad = new SimpleCursorAdapter(this.getActivity(), android.R.layout.simple_list_item_1, cursor, from, to);
        mSearchView.setSuggestionsAdapter(ad);

And that code only works half, since it doesn't show results from what you've already written, it shows all the items.

I just want it to look like this:

Google Play Store screnshot

This is my current code for adding the SearchView:

res/menu/menu.xml:

<item android:id="@+id/fragment_searchmenuitem"
      android:icon="@drawable/ic_search_white"
      android:title="@string/menu_search"
      android:showAsAction="collapseActionView|ifRoom"
      android:actionViewClass="android.widget.SearchView" />

MainActivity.java:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    if(!mDrawerLayout.isDrawerOpen(mDrawerList)) {
        inflater.inflate(R.menu.fragment_search, menu);

        mMenuItem = menu.findItem(R.id.fragment_searchmenuitem);
        mSearchView = (SearchView) mMenuItem.getActionView();
        mMenuItem.expandActionView();
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                mMenuItem.collapseActionView();
                searchSupport.SearchForLyrics(s);
                actionBar.setSubtitle("Searcing for: " + s);
                return true;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
    }

    super.onCreateOptionsMenu(menu, inflater);
}

Could someone please just give me something to start with, to be honest I have no idea where to start. So any help would be really appreciated.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This page talks about how you can implement history for SearchView.

http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html

First, you have to create a content provider:

public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
    public final static String AUTHORITY = "com.example.MySuggestionProvider";
    public final static int MODE = DATABASE_MODE_QUERIES;

    public MySuggestionProvider() {
        setupSuggestions(AUTHORITY, MODE);
    }
}

Then declare the content provider in your application manifest like this:

<application>
    <provider android:name=".MySuggestionProvider"
              android:authorities="com.example.MySuggestionProvider" />
    ...
</application>

Then add the content provider to your searchable configurations like this:

<?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"
    android:searchSuggestAuthority="com.example.MySuggestionProvider"
    android:searchSuggestSelection=" ?" >
</searchable>

You can call saveRecentQuery() to save queries at any time. Here's how you can do it in the onCreate method for your activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent  = getIntent();

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
                MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);
        suggestions.saveRecentQuery(query, null);
    }
}

To clear search history you simply need to call SearchRecentSuggestions's method clearHistory() like this:

SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
        HelloSuggestionProvider.AUTHORITY, HelloSuggestionProvider.MODE);
suggestions.clearHistory();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...