如何添加一个SearchWidget的动作条? [英] How to add a SearchWidget to the ActionBar?
问题描述
我想要一个搜索,而ActionView添加到我的应用程序(如这里<一个解释href="http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget">http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget).不幸的是我一直得到一个NullPointerException异常,我有一个很难检测什么实际上是错误的。
我创建了一个可搜索的配置和可搜索的活动如在Android网页上。我的菜单.xml文件看起来是这样的:
&LT;菜单的xmlns:机器人=http://schemas.android.com/apk/res/android&GT;
...
&LT;项目
机器人:ID =@ + ID / menu_item_search
机器人:actionViewClass =android.widget.SearchView
机器人:图标=@可绘制/ icon_search
机器人:showAsAction =总是
机器人:标题=@字符串/ action_bar_button_search&GT;
&LT; /项目&GT;
&LT; /菜单&gt;
这是在哪里抛出异常的方法:
公共布尔onCreateOptionsMenu(菜单菜单)
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.action_bar,菜单);
SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE);
搜索查看搜索查看=(搜索查看)menu.findItem(R.id.menu_item_search).getActionView();
//这里的NullPointerException抛出;搜索查看为null。
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(假);
返回super.onCreateOptionsMenu(菜单);
}
完整堆栈跟踪:
致命异常:主要
显示java.lang.NullPointerException
在com.example.activities.Test.onCreateOptionsMenu(Test.java:41)
在android.app.Activity.onCreatePanelMenu(Activity.java:2444)
在com.android.internal.policy.impl.PhoneWindow。preparePanel(PhoneWindow.java:408)
在com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:759)
在com.android.internal.policy.impl.PhoneWindow $ 1.运行(PhoneWindow.java:2997)
在android.os.Handler.handleCallback(Handler.java:605)
在android.os.Handler.dispatchMessage(Handler.java:92)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:4507)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:790)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
在dalvik.system.NativeStart.main(本机方法)
公共布尔onCreateOptionsMenu(功能菜单){
super.onCreateOptionsMenu(菜单);
MenuInflater充气= getMenuInflater();
inflater.inflate(R.menu.action_bar,菜单);
菜单项searchItem = menu.findItem(R.id.menu_item_search);
搜索查看搜索查看=(搜索查看)searchItem.getActionView();
SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE);
如果(NULL!= searchManager){
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
searchView.setIconifiedByDefault(假);
返回true;
}
I'm trying to add a Search-ActionView to my application (as explained here http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget). Unfortunately I keep getting a NullPointerException and I'm having a hard time detecting what's actually going wrong.
I created a searchable config and a searchable activity as shown on the android page. My menu .xml file looks like this:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
...
<item
android:id="@+id/menu_item_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/icon_search"
android:showAsAction="always"
android:title="@string/action_bar_button_search">
</item>
</menu>
This is the method where the Exception is thrown:
public boolean onCreateOptionsMenu( Menu menu )
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate( R.menu.action_bar, menu );
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
// NullPointerException thrown here; searchView is null.
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
return super.onCreateOptionsMenu( menu );
}
Complete stack trace:
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.activities.Test.onCreateOptionsMenu(Test.java:41)
at android.app.Activity.onCreatePanelMenu(Activity.java:2444)
at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:408)
at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:759)
at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2997)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4507)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
use this way as in link
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.action_bar, menu);
MenuItem searchItem = menu.findItem(R.id.menu_item_search);
SearchView searchView = (SearchView) searchItem.getActionView();
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if(null!=searchManager ) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
searchView.setIconifiedByDefault(false);
return true;
}
这篇关于如何添加一个SearchWidget的动作条?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!