Android: Show a contextual menu bar when click on a textview -
i have tried http://wptrafficanalyzer.in/blog/creating-a-contextual-menu-bar-contextual-action-mode-for-a-single-view-in-android/
with androidmanifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="tvt.webviewdemo" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="19" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="tvt.webviewdemo.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.internet"/> </manifest>
but has error: java.lang.noclassdeffounderror:
public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); textview tvhello = (textview) findviewbyid(r.id.tv_hello); mcallback = new actionmode.callback() { // error line <<<<< /** * invoked whenever action mode shown. invoked * after oncreateactionmode */ @override public boolean onprepareactionmode(actionmode mode, menu menu) { return false; } /** called when user exits action mode */ @override public void ondestroyactionmode(actionmode mode) { mmode = null; } /** * called when action mode created. called * startactionmode() */ @override public boolean oncreateactionmode(actionmode mode, menu menu) { mode.settitle("demo"); getmenuinflater().inflate(r.menu.context_menu, menu); return true; } /** called when item in context menu selected */ @override public boolean onactionitemclicked(actionmode mode, menuitem item) { switch (item.getitemid()) { case r.id.action1: toast.maketext(getbasecontext(), "selected action1 ", toast.length_long).show(); mode.finish(); // automatically exists action mode, when // user selects action break; case r.id.action2: toast.maketext(getbasecontext(), "selected action2 ", toast.length_long).show(); break; case r.id.action3: toast.maketext(getbasecontext(), "selected action3 ", toast.length_long).show(); break; } return false; } }; onlongclicklistener listener = new onlongclicklistener() { @override public boolean onlongclick(view v) { if (mmode != null) return false; else mmode = startactionmode(mcallback); return true; } }; tvhello.setonlongclicklistener(listener); }
edit - error log:
04-11 20:45:24.600: e/androidruntime(348): fatal exception: main 04-11 20:45:24.600: e/androidruntime(348): java.lang.noclassdeffounderror: tvt.webviewdemo.mainactivity$1 04-11 20:45:24.600: e/androidruntime(348): @ tvt.webviewdemo.mainactivity.oncreate(mainactivity.java:28) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.activitythread.performlaunchactivity(activitythread.java:1611) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.activitythread.handlelaunchactivity(activitythread.java:1663) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.activitythread.access$1500(activitythread.java:117) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.activitythread$h.handlemessage(activitythread.java:931) 04-11 20:45:24.600: e/androidruntime(348): @ android.os.handler.dispatchmessage(handler.java:99) 04-11 20:45:24.600: e/androidruntime(348): @ android.os.looper.loop(looper.java:123) 04-11 20:45:24.600: e/androidruntime(348): @ android.app.activitythread.main(activitythread.java:3683) 04-11 20:45:24.600: e/androidruntime(348): @ java.lang.reflect.method.invokenative(native method) 04-11 20:45:24.600: e/androidruntime(348): @ java.lang.reflect.method.invoke(method.java:507) 04-11 20:45:24.600: e/androidruntime(348): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:839) 04-11 20:45:24.600: e/androidruntime(348): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:597) 04-11 20:45:24.600: e/androidruntime(348): @ dalvik.system.nativestart.main(native method)
how solve problem?
thanks!
i think there mistake in inflating contextual layout inside oncreateactionmode()
:
getmenuinflater().inflate(r.menu.context_menu, menu);
it should inflated using actionmode object:
mode.getmenuinflater().inflate(r.menu.contextual_menu, menu);
Comments
Post a Comment