Android的搜索查看不起作用 [英] Android SearchView does not work
问题描述
我试图更新所有的图书馆,但我仍然有错误。我能够运行在模拟器上的应用程序,但是当我出口APK和一个真正的Android设备上运行,应用程序无法正常工作。
的minSdkVersion是8,targetSdkVersion是19。
请帮助!
menu.xml文件
<菜单的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:例如=http://schemas.android.com/apk/res-auto> <项目
机器人:ID =@ + ID / action_showTC
机器人:orderInCategory =100
机器人:showAsAction =从不
机器人:标题=条款和条件/> <项目机器人:ID =@ + ID / ACTION_SEARCH
机器人:标题=搜索
机器人:orderInCategory =100
例如:showAsAction =ifRoom | collapseActionView
例如:actionViewClass =android.support.v7.widget.SearchView/>&所述; /菜单>
搜索查看
@覆盖
公共布尔onOptionsItemSelected(菜单项项){
如果(item.getItemId()== R.id.action_showTC){
startActivity(新意图(MainActivity.this,T_C.class));
返回true;
}其他{
返回super.onOptionsItemSelected(项目);
}
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){ MenuInflater吹气= getMenuInflater();
inflater.inflate(R.menu.main,菜单); SearchManager的SearchManager的=(SearchManager的)getSystemService(Context.SEARCH_SERVICE);
SupportMenuItem searchMenuItem =((SupportMenuItem)menu.findItem(R.id.action_search));
搜索查看搜索查看=(搜索查看)searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 返回super.onCreateOptionsMenu(菜单);
}
清单
<活动机器人:名字=com.agehk.queue.SearchResultsActivity
机器人:parentActivityName =com.agehk.queue.MainActivity>
&所述;意图滤光器>
<作用机器人:名字=android.intent.action.SEARCH/>
&所述; /意图滤光器> &所述;元数据
机器人:名字=android.app.searchable
机器人:资源=@ XML /搜索/>
< /活性GT;
searchable.xml
<?XML版本=1.0编码=UTF-8&GT?;
<搜索的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:提示=搜索队列
机器人:标签=@字符串/ APP_NAME/>
错误
15 09-04:57:13.105:W / SupportMenuInflater(17184):无法实例化类:android.support.v7.widget.SearchView
09-04 15:57:13.105:W / SupportMenuInflater(17184):java.lang.NoSuchMethodException:其中,初始化> [类android.content.Context]
09-04 15:57:13.105:W / SupportMenuInflater(17184):在java.lang.Class.getConstructorOrMethod(Class.java:423)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在java.lang.Class.getConstructor(Class.java:397)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.internal.view.f.a(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.internal.view.f.a(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.internal.view.f.b(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.internal.view.d.a(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.internal.view.d.inflate(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.agehk.queue.MainActivity.onCreateOptionsMenu(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.app.Activity.onCreatePanelMenu(Activity.java:2577)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v4.app.j.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.a.g.a(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.a.n.a(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.a.g.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.support.v7.a.o.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.android.internal.policy.impl.PhoneWindow preparePanel(PhoneWindow.java:414)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:777)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.android.internal.policy.impl.PhoneWindow $ 1.run(PhoneWindow.java:199)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:835)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.view.Choreographer.doCallbacks(Choreographer.java:626)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.view.Choreographer.doFrame(Choreographer.java:589)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:821)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.os.Handler.handleCallback(Handler.java:730)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.os.Handler.dispatchMessage(Handler.java:92)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.os.Looper.loop(Looper.java:150)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在android.app.ActivityThread.main(ActivityThread.java:5390)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在java.lang.reflect.Method.invokeNative(本机方法)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在java.lang.reflect.Method.invoke(Method.java:525)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-04 15:57:13.105:W / SupportMenuInflater(17184):在dalvik.system.NativeStart.main(本机方法)
09-04 15:57:13.105:D / AndroidRuntime(17184):关闭VM
09-04 15:57:13.105:W / dalvikvm(17184):主题ID = 1:螺纹未捕获的异常退出(组= 0x42f05500)
09-04 15:57:13.105:E / AndroidRuntime(17184):致命异常:主要
09-04 15:57:13.105:E / AndroidRuntime(17184):显示java.lang.NullPointerException
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.agehk.queue.MainActivity.onCreateOptionsMenu(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.app.Activity.onCreatePanelMenu(Activity.java:2577)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.support.v4.app.j.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.support.v7.a.g.a(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.support.v7.a.n.a(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.support.v7.a.g.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.support.v7.a.o.onCreatePanelMenu(来源不明)
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.android.internal.policy.impl.PhoneWindow preparePanel(PhoneWindow.java:414)
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:777)
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.android.internal.policy.impl.PhoneWindow $ 1.run(PhoneWindow.java:199)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:835)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.view.Choreographer.doCallbacks(Choreographer.java:626)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.view.Choreographer.doFrame(Choreographer.java:589)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:821)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.os.Handler.handleCallback(Handler.java:730)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.os.Handler.dispatchMessage(Handler.java:92)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.os.Looper.loop(Looper.java:150)
09-04 15:57:13.105:E / AndroidRuntime(17184):在android.app.ActivityThread.main(ActivityThread.java:5390)
09-04 15:57:13.105:E / AndroidRuntime(17184):在java.lang.reflect.Method.invokeNative(本机方法)
09-04 15:57:13.105:E / AndroidRuntime(17184):在java.lang.reflect.Method.invoke(Method.java:525)
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
09-04 15:57:13.105:E / AndroidRuntime(17184):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-04 15:57:13.105:E / AndroidRuntime(17184):在dalvik.system.NativeStart.main(本机方法)
09-04 15:57:13.115:D / BatteryStatsImpl(445):noteStopWakeLocked com.google.android.gms isFromForeground = FALSE
09-04 15:57:13.115:W / ActivityManager(445):强制完成活动com.agehk.queue / .MainActivity
有关API 11日之前你应该初始化操作栏项目在兼容模式:
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
。getMenuInflater()膨胀(R.menu.main,菜单);
SearchManager的SearchManager的=(SearchManager的)getSystemService(Context.SEARCH_SERVICE);
菜单项searchMenuItem = menu.findItem(R.id.action_search);
搜索查看搜索查看=(搜索查看)MenuItemCompat.getActionView(searchMenuItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
返回true;
}
更新:结果
所以,我试图重现它的API 8模拟器和4.4奇巧。不幸的是,我的2.3.8的设备得到了砖砌前一阵子,所以在硬件低API无法检查。我可以建议你:结果
1.检查搜索查看从 android.support.v7.widget.SearchView进口;
结果
2.检查菜单资源是正确的:
<菜单的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:程序=http://schemas.android.com/apk/res-auto< -----------初始化兼容命名空间
的xmlns:工具=http://schemas.android.com/tools
工具:上下文=MainActivity。> <项目
机器人:ID =@ + ID / action_showTC
机器人:orderInCategory =100
机器人:标题=@字符串/ TERMS_AND_CONDITIONS
应用:showAsAction =从不/> < -----------使用兼容的命名空间 <项目机器人:ID =@ + ID / ACTION_SEARCH
机器人:标题=@字符串/搜索
机器人:orderInCategory =100< ----------使用不同的值
应用:showAsAction =ifRoom | collapseActionView
应用:actionViewClass =android.support.v7.widget.SearchView/>&所述; /菜单>
3。从 onCreateOptionsMenu
返回true,如果没有底层处理(Activity类没有子类)的
UPDATE2:心动不如行动!你可能从活动
类扩展。应 ActioBarActivity
:结果
公共类MainActivity扩展ActionBarActivity {
...
I tried to update all the libraries, but i still got errors. I am able to run the app on the simulator, but when I export the APK and run it on a real android device, the app is not working.
MinSdkVersion is 8, targetSdkVersion is 19. Please help!!!
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:example="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_showTC"
android:orderInCategory="100"
android:showAsAction="never"
android:title="Terms and Conditions"/>
<item android:id="@+id/action_search"
android:title="Search"
android:orderInCategory="100"
example:showAsAction="ifRoom|collapseActionView"
example:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
SearchView
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(item.getItemId() == R.id.action_showTC){
startActivity(new Intent(MainActivity.this, T_C.class));
return true;
}else{
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SupportMenuItem searchMenuItem = ((SupportMenuItem) menu.findItem(R.id.action_search));
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
manifest
<activity android:name="com.agehk.queue.SearchResultsActivity"
android:parentActivityName="com.agehk.queue.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="Search Queue"
android:label="@string/app_name" />
Error
09-04 15:57:13.105: W/SupportMenuInflater(17184): Cannot instantiate class: android.support.v7.widget.SearchView
09-04 15:57:13.105: W/SupportMenuInflater(17184): java.lang.NoSuchMethodException: <init> [class android.content.Context]
09-04 15:57:13.105: W/SupportMenuInflater(17184): at java.lang.Class.getConstructorOrMethod(Class.java:423)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at java.lang.Class.getConstructor(Class.java:397)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.internal.view.f.a(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.internal.view.f.a(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.internal.view.f.b(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.internal.view.d.a(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.internal.view.d.inflate(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.agehk.queue.MainActivity.onCreateOptionsMenu(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.app.Activity.onCreatePanelMenu(Activity.java:2577)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v4.app.j.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.a.g.a(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.a.n.a(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.a.g.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.support.v7.a.o.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:414)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:777)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:199)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:835)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.view.Choreographer.doCallbacks(Choreographer.java:626)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.view.Choreographer.doFrame(Choreographer.java:589)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:821)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.os.Handler.handleCallback(Handler.java:730)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.os.Handler.dispatchMessage(Handler.java:92)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.os.Looper.loop(Looper.java:150)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at android.app.ActivityThread.main(ActivityThread.java:5390)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at java.lang.reflect.Method.invoke(Method.java:525)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-04 15:57:13.105: W/SupportMenuInflater(17184): at dalvik.system.NativeStart.main(Native Method)
09-04 15:57:13.105: D/AndroidRuntime(17184): Shutting down VM
09-04 15:57:13.105: W/dalvikvm(17184): threadid=1: thread exiting with uncaught exception (group=0x42f05500)
09-04 15:57:13.105: E/AndroidRuntime(17184): FATAL EXCEPTION: main
09-04 15:57:13.105: E/AndroidRuntime(17184): java.lang.NullPointerException
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.agehk.queue.MainActivity.onCreateOptionsMenu(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.app.Activity.onCreatePanelMenu(Activity.java:2577)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.support.v4.app.j.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.support.v7.a.g.a(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.support.v7.a.n.a(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.support.v7.a.g.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.support.v7.a.o.onCreatePanelMenu(Unknown Source)
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:414)
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:777)
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:199)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:835)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.view.Choreographer.doCallbacks(Choreographer.java:626)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.view.Choreographer.doFrame(Choreographer.java:589)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:821)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.os.Handler.handleCallback(Handler.java:730)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.os.Handler.dispatchMessage(Handler.java:92)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.os.Looper.loop(Looper.java:150)
09-04 15:57:13.105: E/AndroidRuntime(17184): at android.app.ActivityThread.main(ActivityThread.java:5390)
09-04 15:57:13.105: E/AndroidRuntime(17184): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 15:57:13.105: E/AndroidRuntime(17184): at java.lang.reflect.Method.invoke(Method.java:525)
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-04 15:57:13.105: E/AndroidRuntime(17184): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-04 15:57:13.105: E/AndroidRuntime(17184): at dalvik.system.NativeStart.main(Native Method)
09-04 15:57:13.115: D/BatteryStatsImpl(445): noteStopWakeLocked com.google.android.gms isFromForeground = false
09-04 15:57:13.115: W/ActivityManager(445): Force finishing activity com.agehk.queue/.MainActivity
For API before 11 you should initialize Action Bar Items in compatibility mode:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchMenuItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
Update:
So, I tried to reproduce it in API 8 emulator and on 4.4 KitKat. Unfortunately, my 2.3.8 device got bricked a while ago, so could not check in hardware with low API. What I can suggest you:
1. Check that SearchView is imported from android.support.v7.widget.SearchView;
2. Check menu resource is correct:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" <----------- init compatible namespace
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item
android:id="@+id/action_showTC"
android:orderInCategory="100"
android:title="@string/terms_and_conditions"
app:showAsAction="never"/> <----------- use compatible namespace
<item android:id="@+id/action_search"
android:title="@string/search"
android:orderInCategory="100" <---------- use different value
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
3. return true from onCreateOptionsMenu
if there's no underlying processing (Activity class is not subclassed)
UPDATE2: GOT IT! You probably extends from Activity
class. Should be ActioBarActivity
:
public class MainActivity extends ActionBarActivity {
...
这篇关于Android的搜索查看不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!