java - Android: error with on fragment interaction Listener -
i have been looking @ stackoverflow solve problem , found pretty good, not work me or stupid see (how implement onfragmentinteractionlistener)
i want place fragment inside frame, created , on. have implenet interface , method. (think) did it, app crashes everytime...
*edit: app crashes, when call openhome or openrecommended, oncreate method works, these errors, beeing displayed correctly.
this code:
mainactivity.java
import android.app.activity; import android.app.fragmentmanager; import android.app.fragmenttransaction; import android.content.intent; import android.net.uri; import android.os.bundle; import android.view.view; public class mainactivity extends activity implements homefragment.onfragmentinteractionlistener, recommendedfragment.onfragmentinteractionlistener { fragmenttransaction fragmenttransaction; homefragment homefragment; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); homefragment = new homefragment(); getfragmentmanager().begintransaction().add(r.id.mainframe, homefragment).commit(); } protected void openhome(view view) { /*intent homeintent = new intent(this, homefragment.class); startactivity(homeintent); homefragment = new homefragment(); getfragmentmanager().begintransaction().replace(r.id.mainframe, homefragment).commit();*/ system.out.println("success"); } public void openrecommended(view view) { intent recommendedintent = new intent(this, recommendedfragment.class); startactivity(recommendedintent); recommendedfragment recommendedfragment = new recommendedfragment(); getfragmentmanager().begintransaction().replace(r.id.mainframe, recommendedfragment).commit(); } @override public void onfragmentinteractionhome(uri uri) { } @override public void onfragmentinteractionrecommended(uri uri) { } } homefragment.java
import android.app.activity; import android.app.fragment; import android.net.uri; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; /** * simple {@link fragment} subclass. * activities contain fragment must implement * {@link homefragment.onfragmentinteractionlistener} interface * handle interaction events. * use {@link homefragment#newinstance} factory method * create instance of fragment. */ public class homefragment extends fragment { private onfragmentinteractionlistener mlistener; public static homefragment newinstance() { homefragment fragment = new homefragment(); return fragment; } public homefragment() { // required empty public constructor } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment return inflater.inflate(r.layout.fragment_home, container, false); } // todo: rename method, update argument , hook method ui event public void onbuttonpressed(uri uri) { if (mlistener != null) { mlistener.onfragmentinteractionhome(uri); } } @override public void onattach(activity activity) { super.onattach(activity); try { mlistener = (onfragmentinteractionlistener) activity; } catch (classcastexception e) { throw new classcastexception(activity.tostring() + " must implement onfragmentinteractionlistener"); } } @override public void ondetach() { super.ondetach(); mlistener = null; } /** * interface must implemented activities contain * fragment allow interaction in fragment communicated * activity , potentially other fragments contained in * activity. * <p/> * see android training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >communicating other fragments</a> more information. */ public interface onfragmentinteractionlistener { // todo: update argument type , name public void onfragmentinteractionhome(uri uri); } } recommendedfragment looks same, except methods have different name.
i error:
java.lang.runtimeexception: unable start activity componentinfo{com.domain.app/com.domain.app.mainactivity}: java.lang.classcastexception: com.domain.app.mainactivity@b1d296b0 must implement onfragmentinteractionlistener @ android.app.activitythread.performlaunchactivity(activitythread.java:2195) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2245) @ android.app.activitythread.access$800(activitythread.java:135) @ android.app.activitythread$h.handlemessage(activitythread.java:1196) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:136) @ android.app.activitythread.main(activitythread.java:5017) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:779) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:595) @ dalvik.system.nativestart.main(native method) caused by: java.lang.classcastexception: com.domain.app.mainactivity@b1d296b0 must implement onfragmentinteractionlistener @ com.domain.app.homefragment.onattach(homefragment.java:74) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:849) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1062) @ android.app.backstackrecord.run(backstackrecord.java:684) @ android.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1447) @ android.app.activity.performstart(activity.java:5240) @ android.app.activitythread.performlaunchactivity(activitythread.java:2168) at android.app.activitythread.handlelaunchactivity(activitythread.java:2245) at android.app.activitythread.access$800(activitythread.java:135) at android.app.activitythread$h.handlemessage(activitythread.java:1196) at android.os.handler.dispatchmessage(handler.java:102) at android.os.looper.loop(looper.java:136) at android.app.activitythread.main(activitythread.java:5017) at java.lang.reflect.method.invokenative(native method) at java.lang.reflect.method.invoke(method.java:515) at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:779) at com.android.internal.os.zygoteinit.main(zygoteinit.java:595) at dalvik.system.nativestart.main(native method)
i need here, stuck hours...
john
i’ve removed useless references , related recommendedfragment class. if post update answer.
i’ve tested , works. try explain meaning of openhome() method, because never used based on code, , nevertheless app crashes when call it.
i added method interface because seems me logical thing do.
//mainactivity
public class mainactivity extends activity implements homefragment.onfragmentinteractionlistener { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); getfragmentmanager().begintransaction() .add(r.id.mainframe, new homefragment()) .commit(); } @override public void openhome(view view) { system.out.println("success"); } @override public void onfragmentinteractionhome(uri uri) { toast.maketext(this, "success", toast.length_short).show(); } } //homefragment
public class homefragment extends fragment { private onfragmentinteractionlistener mlistener; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { return inflater.inflate(r.layout.fragment_home, container, false); } public void onbuttonpressed(uri uri) { if (mlistener != null) { mlistener.onfragmentinteractionhome(uri); } } @override public void onattach(activity activity) { super.onattach(activity); try { mlistener = (onfragmentinteractionlistener) activity; mlistener.onfragmentinteractionhome(uri.parse("dowhatyouwant")); } catch (classcastexception e) { throw new classcastexception(activity.tostring() + " must implement onfragmentinteractionlistener"); } } @override public void ondetach() { super.ondetach(); mlistener = null; } public interface onfragmentinteractionlistener { public void onfragmentinteractionhome(uri uri); public void openhome(view view); } }
Comments
Post a Comment