Honeycombで搭載されたActionBarがいい具合にスマホ化されていてカックイイです(*゚∀゚)
Android SDKのサンプルに、ActionBarCompat という、バージョン差を吸収してActionBarを表示する(Honeycombより前のAndroidではActionBarモドキを表示する)アプリがあったので、Toroくんのブログを参考に拙作 あとでよむ twiccaプラグイン に組み込んでみました(Ver.1.2)。
ところが直後から「IS01で起動できなくなった」「SH-10B(LYNX)で動かない」というコメントが…orz
おかしいな、エミュレータで Android 1.6 でも動くことを確認したのに。。
実機を借りて確認したら AbstractMethodError で落ちてました。ぐぬぬ…
12-22 19:07:00.906: E/AndroidRuntime(11445): Uncaught handler: thread main exiting due to uncaught exception
12-22 19:07:00.906: E/AndroidRuntime(11445): java.lang.AbstractMethodError: abstract method not implemented
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.SimpleMenuItem.setShortcutLabel(SimpleMenuItem.java)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:301)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:320)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater.parseMenu(MenuInflater.java:154)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater.inflate(MenuInflater.java:80)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarHelperBase$WrappedMenuInflater.inflate(ActionBarHelperBase.java:244)
12-22 19:07:00.906: E/AndroidRuntime(11445): at jp.coffee_club.atode.ListActivity.onCreateOptionsMenu(ListActivity.java:218)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.Activity.onCreatePanelMenu(Activity.java:2060)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarHelperBase.onPostCreate(ActionBarHelperBase.java:72)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarActivity.onPostCreate(ActionBarActivity.java:60)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1188)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2572)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2606)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.access$2200(ActivityThread.java:134)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1940)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.os.Looper.loop(Looper.java:123)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.main(ActivityThread.java:4403)
12-22 19:07:00.906: E/AndroidRuntime(11445): at java.lang.reflect.Method.invokeNative(Native Method)
12-22 19:07:00.906: E/AndroidRuntime(11445): at java.lang.reflect.Method.invoke(Method.java:521)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-22 19:07:00.906: E/AndroidRuntime(11445): at dalvik.system.NativeStart.main(Native Method)
12-22 19:07:00.906: E/AndroidRuntime(11445): java.lang.AbstractMethodError: abstract method not implemented
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.SimpleMenuItem.setShortcutLabel(SimpleMenuItem.java)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:301)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:320)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater.parseMenu(MenuInflater.java:154)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.view.MenuInflater.inflate(MenuInflater.java:80)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarHelperBase$WrappedMenuInflater.inflate(ActionBarHelperBase.java:244)
12-22 19:07:00.906: E/AndroidRuntime(11445): at jp.coffee_club.atode.ListActivity.onCreateOptionsMenu(ListActivity.java:218)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.Activity.onCreatePanelMenu(Activity.java:2060)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarHelperBase.onPostCreate(ActionBarHelperBase.java:72)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.example.android.actionbarcompat.ActionBarActivity.onPostCreate(ActionBarActivity.java:60)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1188)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2572)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2606)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.access$2200(ActivityThread.java:134)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1940)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.os.Looper.loop(Looper.java:123)
12-22 19:07:00.906: E/AndroidRuntime(11445): at android.app.ActivityThread.main(ActivityThread.java:4403)
12-22 19:07:00.906: E/AndroidRuntime(11445): at java.lang.reflect.Method.invokeNative(Native Method)
12-22 19:07:00.906: E/AndroidRuntime(11445): at java.lang.reflect.Method.invoke(Method.java:521)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
12-22 19:07:00.906: E/AndroidRuntime(11445): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-22 19:07:00.906: E/AndroidRuntime(11445): at dalvik.system.NativeStart.main(Native Method)
MenuInflaterのインナークラスMenuStateのsetItem()メソッドはMenuItemのメソッドを連結して呼び出しているので、おそらくここでメーカーカスタマイズしたMenuItemの追加メソッド setShortcutLabel() を呼び出しているのでしょう。
SimpleMenuItemにも setShortcutLabel() を実装すればよさそう(*゚∀゚)
というわけで src/com/example/android/actionbarcompat/SimpleMenuItem.java に
// IS01/LYNX対策 public MenuItem setShortcutLabel(CharSequence label) { return this; }というメソッドを追加して対策完了ですん(ω)
p.s.同じトコロでハマってる人がいました(^^ゞ → こちら
0 件のコメント:
コメントを投稿