gpt4 book ai didi

java - Android 使用 Fragment 代替库的 Activity

转载 作者:行者123 更新时间:2023-12-01 10:36:55 27 4
gpt4 key购买 nike

我正在使用这个库 MaterialSearchView在我的应用程序中实现类似 Gmail 的搜索 View 。该库已使用 Activity 提供了实现细节。我尝试了片段内的代码,进行了必要的更改。

为了实现它,我们在 Activity 中执行如下操作:

MaterialSearchView searchView = (MaterialSearchView) findViewById(R.id.search_view);

但是,我使用的是片段,所以我所做的是:

searchView = (MaterialSearchView) getActivity().findViewById(R.id.search_view);

除了语音搜索之外,一切正常。该库使用以下代码实现语音搜索:

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

最佳答案

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

关于java - Android 使用 Fragment 代替库的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com