1. SearchView

SearchView是个操作视图,所谓操作视图,就是可以内置在工具栏中的视图。SearchView可以让整个搜索界面完全内置在应用的工具栏中。

 

1.1 SearchView的配置

<?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">

    <item
        android:id="@+id/menu_item_search"
        android:title="@string/search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom" />
</menu>

 

app:actionViewClass指定android.support.v7.widget.SearchView值,告诉工具栏要显示 SearchView 。

之后通过 onCreateOptionsMenu()方法进行实例化菜单XML文件,这样,工具栏就能显示定义在菜单XML中的选项了。

 

1.2 SearchView的使用

 

对其实例化,然后设置回调的接口。

MenuItem searchItem = menu.findItem(R.id.menu_item_search); //将MenuItem取出并保存在searchItem变量中。
        mSearchView = (SearchView)searchItem.getActionView(); //取出SearchView对象。



        //设置监听器
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {//提交搜索查询时。这个方法执行。
                Log.d(TAG, "onQueryTextSubmit: "+ s);
                return true;
            }

            @Override
            public boolean onQueryTextChange(String s) { //搜索框的文字有变化时,这个方法执行。
                Log.d(TAG, "onQueryTextChange: " + s);
                return false;
            }
         });

 

2.使用 shared preferences 实现轻量级数据存储

shared preferences本质上就是文件系统中的文件,可使用 SharedPreferences 类读写它。SharedPreferences 实例用起来更像一个键值对仓库(类似于 Bundle ),但它可以通过持久化存储保存数据。键值对中的键为字符串,而值是原子数据类型。进一步查看shared preferences文件可知,它们实际上是一种简单的XML文件,但 SharedPreferences 类已屏蔽了读写文件的实现细节。shared preferences文件保存在应用沙盒中,所以,类似密码这样的敏感信息不应该用它来保存。

要 获 得 定 制 的 SharedPreferences 实 例 , 可 使 用 Context.getSharedPreferences(String,int) 方法。然而,在实际开发中,我们并不关心具体是什么样的 SharedPreferences实例,只要它能共享于整个应用就可以了。这种情况下,最好使用 PreferenceManager.getDefaultSharedPreferences(Context) 方法,该方法会返回具有私有权限和默认名称的实例(仅在当前应用内可用)。

Shared Preference 示例:

public class QueryPreferences {
    private static final String PREF_SEARCH_QUERY = "searchQuery";
    public static String getStoredQuery(Context context) {
    return PreferenceManager.getDefaultSharedPreferences(context).getString(PREF_SEARCH_QUERY, null);
  }
    public static void setStoredQuery(Context context, String query) {
    PreferenceManager.getDefaultSharedPreferences(context)
    .edit()
    .putString(PREF_SEARCH_QUERY, query)
    .apply();
  } }