gpt4 book ai didi

java - 在 Android 中搜索不起作用

转载 作者:行者123 更新时间:2023-11-30 02:54:50 25 4
gpt4 key购买 nike

几天来,我一直在为 android 中的搜索功能而苦苦挣扎。无法查明错误。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exclude_list);

.......

SearchView searchView = (SearchView)findViewById(R.id.options_menu_main_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if(null!=searchManager ) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}

handleIntent(getIntent());

}

@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
handleIntent(intent);
}

private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
Log.i("q",query);
}
}

searchable.xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:includeInGlobalSearch="false"
android:label="@string/app_name"
android:searchSettingsDescription="@string/search_hint" />

菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item
android:id="@+id/options_menu_main_search"
android:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:title="Search"/>
</menu>

list

<activity
android:name="com.xyz.Exclude_list"
android:label="@string/title_activity_exclude_list"
android:screenOrientation="portrait"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>

<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"
android:value=".app.Search"
/>
</activity>

错误

Caused by: java.lang.NullPointerException
at com.xyz.Exclude_list.onCreate(Exclude_list.java:64)

第 64 行:searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

如果我删除

 SearchView searchView = (SearchView)findViewById(R.id.options_menu_main_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if(null!=searchManager ) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}

搜索正常,但我在搜索中输入时无法获取/记录任何查询。

最佳答案

您正在尝试在 onCreate 方法中初始化一个 MenuItem。您应该在 onCreateOptionsMenu 方法中将其初始化为:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.options_menu_main_search).getActionView();
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if(null!=searchManager ) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
}

参见 Using Search Widget文档中的主题,特别是配置搜索小部件部分。此外,因为您没有使用 AppCompat 库,所以您应该使用此类(在 the docs 中声明):

android:actionViewClass="android.widget.SearchView"

关于java - 在 Android 中搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458971/

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