我正在研究LoaderManager周围的事情,我试图在我自己的应用程序中修改类似的功能。我发现了一些我不清楚的细节。可能是代码从更大的东西中提取出来的情况,细节是示例中不必要的额外功能。也可能是我忽略原因......
首先,示例介绍
public static class MySearchView extends SearchView...
仅覆盖onActionViewCollapsed
以清除查询。是什么原因?
其次,mCurFilter
初始化为null
,并针对null
和onQueryTextChange
中的onCreateLoader
进行了测试。不是空字符串更好,更强大,并且导致比null
指示更简单的实现?具体而言,onQueryTextChange
实现为:
public boolean onQueryTextChange(String newText) {
// Called when the action bar search text has changed. Update
// the search filter, and restart the loader to do a new query
// with this filter.
String newFilter = !TextUtils.isEmpty(newText) ? newText : null;
// Don't do anything if the filter hasn't actually changed.
// Prevents restarting the loader when restoring state.
if (mCurFilter == null && newFilter == null) {
return true;
}
if (mCurFilter != null && mCurFilter.equals(newFilter)) {
return true;
}
mCurFilter = newFilter;
getLoaderManager().restartLoader(0, null, this);
return true;
}
为什么将newText
转换为newFilter
(对于空字符串为null
),然后将复杂的比较转换为null
值和非-null值完成。难道它不能简单地实现为folows(保留的原始注释)?
public boolean onQueryTextChange(String newText) {
// Called when the action bar search text has changed. Update
// the search filter, and restart the loader to do a new query
// with this filter.
// Don't do anything if the filter hasn't actually changed.
// Prevents restarting the loader when restoring state.
if (mCurFilter.equals(newText)) {
return true;
}
mCurFilter = newText;
getLoaderManager().restartLoader(0, null, this);
return true;
}
onCreateLoader
的{{1}} couuld测试,而不是mCurFilter.isEmpty()
。
感谢您的时间和经验。