【问题标题】:How to show search view recent search history如何显示搜索视图最近的搜索历史
【发布时间】:2016-07-14 08:13:11
【问题描述】:

我尝试使用以下方式但无法显示最近的搜索记录

Create "history" to SearchView on ActionBar

Implementing SearchView in action bar

请帮助如何在 serachview 可搜索 xml 中创建和显示最近的搜索

【问题讨论】:

    标签: android android-sqlite searchview android-search android-sharedpreferences


    【解决方案1】:

    这些是我正在使用的步骤

     Searchable xml file 
    
      <?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="example.com.cle.MySuggestionProvider"
        android:searchSuggestSelection=" ?"
        >
    </searchable>
    
    
    
    
    Provider 
    
    
            <provider android:name=".MySuggestionProvider"
                android:authorities="example.com.cle.MySuggestionProvider" />
    
    
    Activity in manifiest
    
     <activity
                android:name=".BaseActivity"
                android:configChanges="orientation|screenSize|keyboardHidden"
                android:theme="@style/AppTheme.ActionBar">
    
    
                <intent-filter>
                    <action android:name="android.intent.action.SEARCH" />
                </intent-filter>
    
    
                <meta-data
                    android:name="android.app.searchable"
                    android:resource="@xml/searchable" />
    
    
    Activity class
    
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
            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);
    
    
            }
        }
    
    
    Content provider class 
    
    public final static String AUTHORITY ="example.com.cle.MySuggestionProvider";
        public final static int MODE = DATABASE_MODE_QUERIES;
    
        public MySuggestionProvider() {
            setupSuggestions(AUTHORITY, MODE);
        }
    

    【讨论】:

      【解决方案2】:

      我找到了解决办法

      1.创建可搜索的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"   android:searchSuggestAuthority="your packagename.MySuggestionProvider"
          android:searchSuggestSelection=" ?" >
      </searchable>
      

      2.创建内容提供者类扩展 SearchRecentSuggestionsProvider

       public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
      
          public final static String AUTHORITY = "your package name.MySuggestionProvider";
          public final static int MODE = DATABASE_MODE_QUERIES;
      
          public MySuggestionProvider() {
              setupSuggestions(AUTHORITY, MODE);
          }
      }
      
      1. 在你的活动课中

      oncreate 方法

       handledearch(getIntent());
      
      4. over ride method
      
      
          @Override
          protected void onNewIntent(Intent intent) {
             setIntent(intent);
      
            handledearch(intent);
          }
      
          public void handledearch( Intent intent)
          {
              if (Intent.ACTION_SEARCH.equalsIgnoreCase(intent.getAction())) {
                  String query = intent.getStringExtra(SearchManager.QUERY);
      
              mtToolbar.setTitle(query);
      
                  SearchRecentSuggestions searchRecentSuggestions=new SearchRecentSuggestions(this,
                          MySuggestionProvider.AUTHORITY,MySuggestionProvider.MODE);
      
                  searchRecentSuggestions.saveRecentQuery(query,null);
              }
          }
      
      1. 在菜单中

        @覆盖 public boolean onCreateOptionsMenu(Menu menu) {

            getMenuInflater().inflate(R.menu.menu,menu);
        
            SearchManager searchManager=(SearchManager)getSystemService(Context.SEARCH_SERVICE);
        
            SearchView searchView;
        
            MenuItem menuItem=menu.findItem(R.id.action_search);
        
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            {
                searchView=(SearchView)menuItem.getActionView();
        
            }
            else
            {
                searchView=(SearchView) MenuItemCompat.getActionView(menuItem);
        
            }
        
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setQueryHint(getResources().getString(R.string.search_hint));
        
            return super.onCreateOptionsMenu(menu);
        
        }
        

      【讨论】:

        猜你喜欢
        • 2015-01-06
        • 2020-05-08
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 2011-05-11
        • 1970-01-01
        • 2012-10-12
        • 2012-04-28
        相关资源
        最近更新 更多