我在我的应用中使用此库MaterialSearchView来实现搜索视图等Gmail。该库使用Activity提供了实现细节。我在片段中尝试了代码,进行了必要的更改。
为了实现它,我们在活动中做了类似的事情:
MaterialSearchView searchView = (MaterialSearchView) findViewById(R.id.search_view);
但是,我正在使用片段,所以我所做的是:
searchView = (MaterialSearchView) getActivity().findViewById(R.id.search_view);
除VoiceSearch外,一切正常。该库使用以下代码实现语音搜索:
private void onVoiceClicked() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak an item name or number"); // user hint
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); // setting recognition model, optimized for short phrases – search queries
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); // quantity of results we want to receive
if (mContext instanceof Activity) {
((Activity) mContext).startActivityForResult(intent, REQUEST_VOICE);
}
我该如何使这项工作?上面代码中的mContext
在构造函数中设置为:
public MaterialSearchView(Context context) {
this(context, null);
}
如何从片段中使其工作? library
的代码答案 0 :(得分:1)
mContext
可能不是Activity
。
尝试使用此逻辑(从MediaRouteButton.getActivity()复制)以获取Activity
。
Activity getActivity() {
Context context = getContext();
while (context instanceof ContextWrapper) {
if (context instanceof Activity) {
return (Activity)context;
}
context = ((ContextWrapper)context).getBaseContext();
}
return null;
}