点击搜索按钮后,没有任何反应。搜索框没有出现.Below是我的menu.xml。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.support.v7.widget.SearchView" />
<item android:id="@+id/action_compose"
android:icon="@drawable/ic_action_compose"
android:title="@string/action_compose"
android:showAsAction="never" />
</menu>
虽然搜索窗口小部件未显示在操作栏上,但在方法 onCreateOptionsMenu 中添加以下代码之前没有抛出异常。
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
详细例外如下。
01-19 14:17:00.222: W/ResourceType(2064): No package identifier when getting value for resource number 0x00000000
01-19 14:17:00.222: W/MenuInflater(2064): Cannot instantiate class: android.support.v7.widget.SearchView
01-19 14:17:00.222: W/MenuInflater(2064): java.lang.reflect.InvocationTargetException
01-19 14:17:00.222: W/MenuInflater(2064): at java.lang.reflect.Constructor.newInstance(Native Method)
01-19 14:17:00.222: W/MenuInflater(2064): at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.MenuInflater$MenuState.newInstance(MenuInflater.java:514)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:471)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:493)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.MenuInflater.parseMenu(MenuInflater.java:189)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.MenuInflater.inflate(MenuInflater.java:110)
01-19 14:17:00.222: W/MenuInflater(2064): at com.example.android.effectivenavigation.MainActivity.onCreateOptionsMenu(MainActivity.java:215)
01-19 14:17:00.222: W/MenuInflater(2064): at android.app.Activity.onCreatePanelMenu(Activity.java:2820)
01-19 14:17:00.222: W/MenuInflater(2064): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275)
01-19 14:17:00.222: W/MenuInflater(2064): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:548)
01-19 14:17:00.222: W/MenuInflater(2064): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:917)
01-19 14:17:00.222: W/MenuInflater(2064): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:258)
01-19 14:17:00.222: W/MenuInflater(2064): at android.os.Handler.handleCallback(Handler.java:739)
01-19 14:17:00.222: W/MenuInflater(2064): at android.os.Handler.dispatchMessage(Handler.java:95)
01-19 14:17:00.222: W/MenuInflater(2064): at android.os.Looper.loop(Looper.java:135)
01-19 14:17:00.222: W/MenuInflater(2064): at android.app.ActivityThread.main(ActivityThread.java:5221)
01-19 14:17:00.222: W/MenuInflater(2064): at java.lang.reflect.Method.invoke(Native Method)
01-19 14:17:00.222: W/MenuInflater(2064): at java.lang.reflect.Method.invoke(Method.java:372)
01-19 14:17:00.222: W/MenuInflater(2064): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-19 14:17:00.222: W/MenuInflater(2064): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
01-19 14:17:00.222: W/MenuInflater(2064): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
01-19 14:17:00.222: W/MenuInflater(2064): at android.content.res.Resources.getValue(Resources.java:1233)
01-19 14:17:00.222: W/MenuInflater(2064): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2598)
01-19 14:17:00.222: W/MenuInflater(2064): at android.content.res.Resources.getLayout(Resources.java:1049)
01-19 14:17:00.222: W/MenuInflater(2064): at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
01-19 14:17:00.222: W/MenuInflater(2064): at android.support.v7.widget.SearchView.<init>(SearchView.java:282)
01-19 14:17:00.222: W/MenuInflater(2064): at android.support.v7.widget.SearchView.<init>(SearchView.java:268)
01-19 14:17:00.222: W/MenuInflater(2064): at android.support.v7.widget.SearchView.<init>(SearchView.java:264)
01-19 14:17:00.222: W/MenuInflater(2064): ... 21 more
答案 0 :(得分:5)
我使用了appcompat-v7
然后你应该没有这样做:
我导入的是导入android.app.ActionBar;
这是本机操作栏,而不是后端。也:
您需要继承ActionBarActivity
,而不是FragmentActivity
和
您需要将android:showAsAction
和android:actionViewClass
更改为app:showAsAction
和app:actionViewClass
例如,here is a sample project使用SearchView
中的appcompat-v7
。
该项目的菜单资源是:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/ic_action_search"
app:showAsAction="ifRoom|collapseActionView"
android:title="@string/filter">
</item>
</menu>
请注意app
和actionViewClass
使用showAsAction
前缀。