本章主要講了 ToolBar 中的 SearchView 的使用以及 SharedPreferences 的簡單使用。
GitHub 地址:
完成第25章
1. SearchView
SearchView 是一個 ActionView(操作視圖),所謂操作視圖,就是可以內置在工具欄中的視圖。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
屬性,這個就是指定這個 item 的 actionView 類。
現在只要我們在 onCreateOptionsMenu 中引用該菜單資源,就能看到 SearchView 了。
1.2 SearchView 的使用
我們現在能看到 SearchView,當然還要讓其能夠進行相應的工作:首先獲取實例,然后設置回調方法。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_photo_gallery, menu);
// 在這里獲取這個 ActionView
MenuItem searchItem = menu.findItem(R.id.menu_item_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// 點擊提交后
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// 文字改變時調用
Log.d(TAG, "QueryTextChange: " + newText);
return false;
}
});
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String query = QueryPreferences.getStoredQuery(getActivity());
searchView.setQuery(query, false);
}
});
}
2. 使用 SharedPreferences 實現輕量級數據存儲
shared preferences 本質上就是文件系統中的文件,可使用 SharedPreferences 類讀寫它。 SharedPreferences 實例用起來更像一個鍵值對倉庫(類似于 Bundle),但它可以通過持久化存儲保存數據。鍵值對中的鍵為字符串,而值是原子數據類型。進一步查看 shared preferences 文件可知,它們實際上是一種簡單的 XML 文件,但 SharedPreferences 類已屏蔽了讀寫文件的實現細節。shared preferences 文件保存在應用沙盒中,所以,類似密碼這樣的敏感信息不應該用它來保存。
要獲得定制的 SharedPreferences 實例 , 可使用 Context.getSharedPreferences (String,int)方法。然而,在實際開發中,我們并不關心具體是什么樣的 SharedPreferences 實例,只要它能共享于整個應用就可以了。這種情況下,最好使用PreferenceManager. getDefaultSharedPreferences(Context)
方法,該方法會返回具有私有權限和默認名稱的實例(僅在當前應用內可用)。
一個示例的 SharedPreferences 操作類如下:
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();
}
}
GitHub Page: kniost.github.io
簡書:http://www.lxweimin.com/u/723da691aa42