ter*_*es3 20 java android android-appcompat
我正在尝试使用SearchView我的应用程序.首先,我添加appcompat到我的项目:
compile "com.android.support:appcompat-v7:19.0.1+"
Run Code Online (Sandbox Code Playgroud)
我将此代码添加到菜单中:
<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>
Run Code Online (Sandbox Code Playgroud)
但是当我开始时,activity我得到了这个:
03-07 17:25:39.110 16861-16861/de.treevo.app W/MenuInflater:无法在java.lang.reflect.Constructor中实例化类:android.support.v7.widget.SearchView java.lang.reflect.InvocationTargetException. android.view.MenuInflater $ MenuState.adInstter(MenuInflater.java:471)在android.view.MenuInflater $ MenuState.addItem的android.view.MenuInflater $ MenuState.setItem(MenuInflater.java:430)上的newInstance(Native Method) MenuInflater.java:451)在android.view.MenuInflater.parseMenu(MenuInflater.java:188),位于de.treevo.app.search.onCreateOptionsMenu(search.java :260)在com.android.internal.policy.impl的com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489)的android.app.Activity.onCreatePanelMenu(Activity.java:2538). PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853)at com.android.internal.policy.impl.PhoneWindow $ 1.run(PhoneWindow.java:273)at android.view.Choreographer $ CallbackRecord.run(Choreograph)er.java:761)在Android.view.Choreographer(Page 4)上的android.view.doCallbacks(Choreographer.java:574),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)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)at com的java.lang.reflect.Method.invoke(Native Method) .android.internal.os.ZygoteInit.main(ZygoteInit.java:595)引起:android.view.InflateException:二进制XML文件行#41:在android.view.LayoutInflater.createView(LayoutInflater.java:620)中输出类错误)在android.view.LayoutInflater.createVie的android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)的com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)中 位于android.view.LayoutInflater.inflate(LayoutInflater.java:492)的android.view.LayoutInflater.inflate(LayoutInflater.java)中的android.view.LayoutInflater.inflate(LayoutInflater.java:694)中的wFromTag(LayoutInflater.java:694) :397)在android.support.v7.widget.SearchView.(SearchView.java:262)的android.support.v7.widget.SearchView.(SearchView.java:254)at java.lang.reflect.Constructor.newInstance(在android.view.MenuInflater $ MenuState.newInstter(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)at de.treevo.app.search.onCreateOptionsMenu(search.java:260) )在com.android.interna的android.app.Activity.onCreatePanelMenu(Activity.java:2538)l.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489)位于com.android.internal.policy.impl.PhoneWindow $ 1的com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853) .run(PhoneWindow.java:273)在android.view.Choreographer $ dovographer上运行android.view.Chore:(Choreographer.java:761),在android.view.Choreographer.doFrame上安装android.view.doCallbacks(Choreographer.java:574) Choreographer.java:543)在android.view.Handler.dispatchMessage(Handler.java)的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)android.os.Handler.handleCallback(Handler.java:733) :95)在android.app.Looper.loop(Looper.java:136)的android.app.ActivityThread.main(ActivityThread.java:5017)at java.lang.reflect.Method.invoke(Native Method)at com. android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)由android.view上的java.lang.reflect.Constructor.newInstance(Native Method)引起的:java.lang.reflect.InvocationTargetException. LayoutInflater.createView(LayoutInflater.java:594)位于android.view的android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)的com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) .LayoutInflater.createViewFromTag(LayoutInflater.java:694)在android.view.LayoutInflater.inflate(LayoutInflater.java)中的android.view.LayoutInflater.inflate(LayoutInflater.java:755)处于android.view.LayoutInflater.inflate( LayoutInflater.java:397)在android.support.v7.widget.SearchView.(SearchView.java:262)的android.support.v7.widget.SearchView.(SearchView.java:254)at java.lang.reflect.Constructor .newInstance(原生方法)在android.view.MenuInflater $ MenuState.newInstance(MenuInflater.java:471)android.view.MenuInflater $ MenuState.setItem(MenuInflater.java:430)at android.view.MenuInflater $ MenuState.addItem(MenuInflater.java:451) )在android.view.MenuInflater.parseMenu(MenuInflater.java:188)的android.view.MenuInflater.inflate(MenuInflater.java:110)at de.treevo.app.search.onCreateOptionsMenu(search.java:260)at 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)在android.view.Choreographer的android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)的com.android.internal.policy.impl.PhoneWindow $ 1.run(PhoneWindow.java:273) .doCallbacks(Choreographer.java:574)at和 roid.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.app.Looper.loop(Looper.java:136)的android.app.ActivityThread.main(ActivityThread.java:5017),位于java.lang.reflect.Method.在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)中调用(Native Method)引起:android. content.res.Resources $ NotFoundException:资源不是Drawable(颜色或路径):在android.content.res.Resources.loadDrawable上的TypedValue {t = 0x2/d = 0x7f010030 a = -1}(Resources.java:2068)在android.content.res.TypedArray.getDrawable(TypedArray.java:602)的android.widget.ImageView.(ImageView.java:129)在android.widget.ImageView.(我 mageView.java:119)在java.lang.reflect.Constructor.newInstance(Native Method)的android.view.LayoutInflater.createView(LayoutInflater.java:594)at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(在Android.view.LayoutInflater.rInflate(LayoutInflater.java:755)的android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)的android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)中的PhoneLayoutInflater.java:56) )android.view.LayoutInflater.inflate(LayoutInflater.java:492)在android.sview.LayoutInflater.inflate(LayoutInflater.java:397)的android.support.v7.widget.SearchView.(SearchView.java:262)at在android.view.MenuInflater的java.lang.reflect.Constructor.newInstance(Native Method)中的android.support.v7.widget.SearchView.(SearchView.java:254)$ MenuState.newInstance(MenuInflater.java:471)at和 在Android.view.MenuInflater.parseMenu(MenuInflater.java:188)的android.view.MenuInflater $ MenuState.addItem(MenuInflater.java:451)上的roid.view.MenuInflater $ MenuState.setItem(MenuInflater.java:430) .view.MenuInflater.inflate(MenuInflater.java:110)位于com.android的android.app.Activity.onCreatePanelMenu(Activity.java:2538)的de.treevo.app.search.onCreateOptionsMenu(search.java:260).在com.android.internal.policy.impl.PhoneWindow $ 1的com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:853)中的internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:489) .run(PhoneWindow.java:273)在android.view.Choreographer $ dovographer上运行android.view.Chore:(Choreographer.java:761),在android.view.Choreographer.doFrame上安装android.view.doCallbacks(Choreographer.java:574) Choreographer.java:543)在android.view.Choreogra pher $ 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(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
当我按下搜索图标时没有发生任何事情:(
EDIT1:
@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;
}
Run Code Online (Sandbox Code Playgroud)
Qua*_*yen 42
在我的情况下,它适用于开发模式,但在发布模式崩溃(导出签名apk).要解决这个问题,请将此行添加到proguard-rules.txt
-keep class android.support.v7.widget.SearchView { *; }
Run Code Online (Sandbox Code Playgroud)
fll*_*llo 13
尝试在布局上添加自定义前缀,如:
<?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/action_search"
android:title="@string/search"
android:icon="@drawable/ic_action_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
Run Code Online (Sandbox Code Playgroud)
请参阅文档,在示例中,您必须添加自定义前缀(在上面的代码中为"app").
而且,而不是:
MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchItem.getActionView();
Run Code Online (Sandbox Code Playgroud)
试试这个:
MenuItem searchItem = menu.findItem(R.id.action_search);
// with MenuItemCompat instead of your MenuItem
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
Run Code Online (Sandbox Code Playgroud)
如果这有帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
9677 次 |
| 最近记录: |