gpt4 book ai didi

android - 在 Fragment 而不是 Activity 中显示搜索结果

转载 作者:行者123 更新时间:2023-11-29 17:01:40 24 4
gpt4 key购买 nike

我正在尝试按照此处的示例在现有应用中实现搜索:
http://www.materialdoc.com/search-filter/

该应用程序使用 fragment 替换来更改显示,因此我没有创建另一个 Activity ,而是尝试在另一个 fragment 中显示结果。问题在于,当输入搜索字符串并且放大类就是它时,不会调用任何处理程序。

我认为主要问题在于 MainActivity.onCreateOptionsMenu() 中的这段代码:

    // Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
ComponentName componentName = new ComponentName(this, MainActivity.class);
// ComponentName componentName = new ComponentName(this, SearchListFragment.class); // results in NPE
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));

MainActivity.class 调用 setSearchableInfo() 什么都不做,用 SearchListFragment.class 调用它会导致 NPE。

我在这里创建了一个 SSCCE:
https://github.com/emnrd-ito/SearchFragmentTest

你能知道如何解决这个问题吗?

最佳答案

以下内容应该可以帮助您完成大部分工作:

如下更改您的 list :

    <activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEARCH" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>

这包括新的启动模式或“singleTop”、“搜索” Intent 和所需的元数据

在 MainActivity 中:

OnCreateOptionsMenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);

// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
// ComponentName componentName = new ComponentName(this, SearchListFragment.class);
// searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));

return true;
}

onNewIntent

@Override
public void onNewIntent(Intent intent) {
Log.d("onNewIntent", "here!");
}

您必须展开 onNewIntent 才能进行搜索。 Intent 包含搜索条件。参见 this了解详情。

我认为这些是所有的修改。这不是一个完整的解决方案,但我希望它能让您走上解决其余问题的道路。

关于android - 在 Fragment 而不是 Activity 中显示搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42539590/

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