Android getting RESULT_CANCELED when I specifically add RESULT_OK -
this problem, have main view shows 1 button, pressing button view shown. view has button, when button push current view finishs , control backs previous view.
to show second view use startactivityforresult, put code here.
private void startnewview() { intent = new intent(getapplicationcontext(), newview.class); startactivityforresult(it,view_id); }
the view called has button event, here code
button b = (button) findviewbyid(r.id.close); b.setonclicklistener(new view.onclicklistener() { public void onclick(view v) { setresult(result_ok); finish(); } });
and finally, method onactivityresult in main view, here code
protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if(requestcode == view_id && resultcode == result_ok) { tv = (textview) findviewbyid(r.id.tv); tv.settext("the result ok here :)"); } }
the problem resultcode 0 = result_canceled , not know how solve it, can me?
thank much!
i can't explain happening in code have project sample this..
a fooactivity button btnfoo:
@override protected void onstart() { super.onstart(); btnfoo.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { startactivityforresult(new intent("xper.activity.activity_bar_intent"),1); } }); }
and baractivity added in androidmanifest.xml that:
<activity android:name = "baractivity"> <intent-filter> <action android:name = "xper.activity.activity_bar_intent"/> <category android:name = "android.intent.category.default"/> </intent-filter> </activity>
the respective code retrieve intent inside bar in onclicevent of btnbar (button):
@override protected void onstart() { super.onstart(); btnbar.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent("xper.activity.activity_bar_result_intent"); intent.putextra("codbar", "bar"); setresult(activity.result_ok, intent); finish(); } }); }
now, if doesn't handled onactivityresult() event, when press android button "back", can errors.
if intent (intention) in activity b give information activity a, if press button back, don't know if activity b in stack, intention isn't done. did following:
@override public void onbackpressed() { // todo auto-generated method stub super.onbackpressed(); //intent intent = new intent("xper.activity.activity_bar_result_intent"); //intent.putextra("codbar", "bar"); //setresult(activity.result_canceled, intent); setresult(activity.result_canceled); finish(); }
handling information did following in event onactivityresult() see retrieved information in bar activity:
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if(data != null) { toast.maketext(this, "bar\trequestcode == " + requestcode + "\tresultcode == " + resultcode + "\tdata == " + data, 10000).show(); btnfoo.settext("bar\trequestcode == " + requestcode + "\tresultcode == " + resultcode + "\tdata == " + data /*+ "extras == " + data.getextras().getstring("codbar")*/); } else { toast.maketext(this, "bar\trequestcode == " + requestcode + "\tresultcode == " + resultcode, 10000).show(); btnfoo.settext("bar\trequestcode == " + requestcode + "\tresultcode == " + resultcode); } }
if have more activities return infomation parent activity pratices following:
//put private static final int globals atributes respective name of //activity represent requestcode each activity have like: private static final int activity1 = 117; private static final int activity2 = 118; ... private static final int activityn = 215; //in event onactivityresult() better use switch statement handle each //specific activity catch information @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if(resultcode == activity.result_canceled) return; // breaks //if decide handle information of activity.result_canceled //ignore above condition returns , handle inside switch statement switch(requestcode) { case activity1: { //dosomething } break; case activity2: { //dosomething } break; ... case activityn: { //dosomething } break; } }
if can't sample code.. please give me email me send foobaractivity project
Comments
Post a Comment