【发布时间】:2014-03-07 16:30:21
【问题描述】:
我正在尝试为我的应用程序使用SearchView。首先我将appcompat 添加到我的项目中:
compile "com.android.support:appcompat-v7:19.0.1+"
我将这段代码添加到我的菜单中:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_search"
android:title="@string/search"
android:icon="@drawable/ic_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
但是当我启动activity 时,我得到了这个:
03-07 17:25:39.110 16861-16861/de.treevo.app W/MenuInflater﹕不能 实例化类:android.support.v7.widget.SearchView java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.MenuInflater$MenuState.newInstance(MenuInflater.java:471) 在 android.view.MenuInflater$MenuState.setItem(MenuInflater.java:430) 在 android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451) 在 android.view.MenuInflater.parseMenu(MenuInflater.java:188) 在 android.view.MenuInflater.inflate(MenuInflater.java:110) 在 de.treevo.app.search.onCreateOptionsMenu(search.java:260) 在 android.app.Activity.onCreatePanelMenu(Activity.java:2538) 在 com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489) 在 com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) 在 com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:273) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 在 android.view.Choreographer.doCallbacks(Choreographer.java:574) 在 android.view.Choreographer.doFrame(Choreographer.java:543) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 引起:android.view.InflateException:二进制 XML 文件第 41 行:膨胀类错误 在 android.view.LayoutInflater.createView(LayoutInflater.java:620) 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.support.v7.widget.SearchView.(SearchView.java:262) 在 android.support.v7.widget.SearchView.(SearchView.java:254) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.MenuInflater$MenuState.newInstance(MenuInflater.java:471) 在 android.view.MenuInflater$MenuState.setItem(MenuInflater.java:430) 在 android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451) 在 android.view.MenuInflater.parseMenu(MenuInflater.java:188) 在 android.view.MenuInflater.inflate(MenuInflater.java:110) 在 de.treevo.app.search.onCreateOptionsMenu(search.java:260) 在 android.app.Activity.onCreatePanelMenu(Activity.java:2538) 在 com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489) 在 com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) 在 com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:273) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 在 android.view.Choreographer.doCallbacks(Choreographer.java:574) 在 android.view.Choreographer.doFrame(Choreographer.java:543) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.LayoutInflater.createView(LayoutInflater.java:594) 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.support.v7.widget.SearchView.(SearchView.java:262) 在 android.support.v7.widget.SearchView.(SearchView.java:254) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.MenuInflater$MenuState.newInstance(MenuInflater.java:471) 在 android.view.MenuInflater$MenuState.setItem(MenuInflater.java:430) 在 android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451) 在 android.view.MenuInflater.parseMenu(MenuInflater.java:188) 在 android.view.MenuInflater.inflate(MenuInflater.java:110) 在 de.treevo.app.search.onCreateOptionsMenu(search.java:260) 在 android.app.Activity.onCreatePanelMenu(Activity.java:2538) 在 com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489) 在 com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) 在 com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:273) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 在 android.view.Choreographer.doCallbacks(Choreographer.java:574) 在 android.view.Choreographer.doFrame(Choreographer.java:543) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 引起:android.content.res.Resources$NotFoundException:资源不是可绘制的(颜色或路径): 类型值{t=0x2/d=0x7f010030 a=-1} 在 android.content.res.Resources.loadDrawable(Resources.java:2068) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:602) 在 android.widget.ImageView.(ImageView.java:129) 在 android.widget.ImageView.(ImageView.java:119) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.LayoutInflater.createView(LayoutInflater.java:594) 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.support.v7.widget.SearchView.(SearchView.java:262) 在 android.support.v7.widget.SearchView.(SearchView.java:254) 在 java.lang.reflect.Constructor.newInstance(Native Method) 在 android.view.MenuInflater$MenuState.newInstance(MenuInflater.java:471) 在 android.view.MenuInflater$MenuState.setItem(MenuInflater.java:430) 在 android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451) 在 android.view.MenuInflater.parseMenu(MenuInflater.java:188) 在 android.view.MenuInflater.inflate(MenuInflater.java:110) 在 de.treevo.app.search.onCreateOptionsMenu(search.java:260) 在 android.app.Activity.onCreatePanelMenu(Activity.java:2538) 在 com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489) 在 com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) 在 com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:273) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 在 android.view.Choreographer.doCallbacks(Choreographer.java:574) 在 android.view.Choreographer.doFrame(Choreographer.java:543) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
当我按下搜索图标时,什么也没有发生:(
编辑1:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.offline, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchItem.getActionView();
//setupSearchView(searchItem);
// menu.findItem(R.id.action_search).getActionView();
return true;
}
【问题讨论】:
标签: java android android-appcompat