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(); } }