BUG系列:转让startActivityForResult()amp;onActivityResult()没有反应
我使用startActivityForResult()&onActivityResult()。由Activity-A 跳轉(zhuǎn)到Activity-B 頁面,然后在Activity-B頁面編輯完個人資料之后攜帶個人數(shù)據(jù)交回到Activity-A頁面。事實上非常easy的問題,可是 讓我沒有預料到的是居然出現(xiàn)了岔子。以下展示我的效果圖及正確的代碼:
這些代碼是作為編輯昵稱:<Activity-B頁面>
public class EditToNickNameAty extends Activity implements OnClickListener{private EditText edtNickName;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.aty_thedata_edit_nickname);findViewById(R.id.btn_back).setOnClickListener(this);edtNickName=(EditText) findViewById(R.id.edt_nickName);findViewById(R.id.img_nickNameCancell).setOnClickListener(this);findViewById(R.id.btnOk).setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.img_nickNameCancell://昵稱清空設置鍵edtNickName.setText("");break;case R.id.btnOk:nickNameHandleViews();break;case R.id.btn_back:finish();overridePendingTransition(R.anim.loadout_from_enter,R.anim.loadout_from_exit);break;default:break;}}private void nickNameHandleViews() {// TODO Auto-generated method stubString result = edtNickName.getText().toString();Intent resultFor=new Intent(this, PersonalDataEditAty.class);if(TextUtils.isEmpty(result)){result = "";}Bundle data = new Bundle();data.putString("result", result);resultFor.putExtras(data);//設置結(jié)果并進行傳輸this.setResult(PersonalDataEditAty.ATY_CODE_NICKENAME, resultFor);this.finish();} }Activity-B頁面:
跳轉(zhuǎn)button作跳轉(zhuǎn)監(jiān)聽:
case R.id.lay_item_nikeName:Intent nickName = new Intent(this, EditToNickNameAty.class);startActivityForResult(nickName, 10);//ATY_CODE_NICKENAMEoverridePendingTransition(R.anim.loadin_from_enter,R.anim.loadin_from_exit);break;
接收從Activity-A攜帶過來的數(shù)據(jù):
"+"token="+token+"&nick="+resetNickName, NormalFinalcons.NICK_NAME); } }
當中一些細節(jié)問題這里提一下:
在onActivityResult()。方法參數(shù)中參數(shù)--int resultCode? --int requestCode? --Intent data
當中,
resultCode:是Activity-A頁面 startActivityForResult(intent,resultCode); 中與該跳轉(zhuǎn)方法的第二個參數(shù)匹對且相等;
requestCode:是Activity-B頁面 setResult(requestCode, intent);中與該跳轉(zhuǎn)方法的第一個參數(shù)匹配且相等;
data:是Activity-B頁面 setResult(requestCode, intent);中與該跳轉(zhuǎn)方法的第二個參數(shù)匹配且相等。
注意:startActivityForResult(intent,resultCode);中的resultCode最好不要與setResult(requestCode, intent);中的requeCode相等。resultCode>0
最后解決實際問題:為什么我的全部的配置都做了。就是不能由B------->A的正常跳轉(zhuǎn)呢?
原因一:與 Activity 的載入模式(launchMode)有關(guān);Activity的載入模式,在這樣的的跳轉(zhuǎn)的方式下要使用標準模式(我就是使用了 android:launchMode="singleTop"模式,結(jié)果不能正常跳轉(zhuǎn))原因二:調(diào)用startActivityForResult的參數(shù)問題。即原先調(diào)用時這樣:startActivityForResult(intent, 0);是第二個參數(shù)的問題。該參數(shù)必須大于0才干在返回值,并激活onActivityResult方法。原因三:在TabHost的子Activity中startActivityForResult調(diào)用其它Activity時候遭遇到onActivityResult方法不響應的問題;
解決方式:
1.通過父Activity啟動其它Activity;2.實現(xiàn)父Activity的onActivityResult方法,將該處接收到的請求轉(zhuǎn)發(fā)給當前活動的子Activity;3.自己定義一個轉(zhuǎn)發(fā)接口用來實現(xiàn)第2步中的轉(zhuǎn)發(fā)功能;4.子Activity中實現(xiàn)第3步接口中的方法用來接收返回信息;?
代碼例如以下:
1.通過父Activity啟動其它Activity
getParent().startActivityForResult(new Intent(...), REQUEST_CODE);2.實現(xiàn)父Activity的onActivityResult方法
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// 獲取當前活動的Activity實例Activity subActivity = getLocalActivityManager().getCurrentActivity();//推斷是否實現(xiàn)返回值接口if (subActivity instanceof OnTabActivityResultListe<wbr>ner) {//獲取返回值接口實例OnTabActivityResultListe<wbr>ner listener = (OnTabActivityResultListe<wbr>ner) subActivity;//轉(zhuǎn)發(fā)請求到子Activitylistener.onTabActivityResult(requestCode, resultCode, data);}super.onActivityResult(requestCode, resultCode, data);}3.自己定義接口
public interface OnTabActivityResultListener {public void onTabActivityResult(int requestCode, int resultCode, Intent data);}4.子Activity須要實現(xiàn)onTabActivityResult方法
@Overridepublic void onTabActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {//實現(xiàn)該處邏輯...}} /** <span>凡是Activity本身含有上次父類的情況都不能直接使用startActivityForResult。而要通過getParent()。通過父類調(diào)用此方法。</span> */?
版權(quán)聲明:本文博客原創(chuàng)文章,博客,未經(jīng)同意,不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/hrhguanli/p/4679738.html
總結(jié)
以上是生活随笔為你收集整理的BUG系列:转让startActivityForResult()amp;onActivityResult()没有反应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android HDMI 清晰度 分辨率
- 下一篇: 理解闭包