BUG系列:转让startActivityForResult()amp;onActivityResult()没有反应
我使用startActivityForResult()&onActivityResult()。由Activity-A 跳轉到Activity-B 頁面,然后在Activity-B頁面編輯完個人資料之后攜帶個人數據交回到Activity-A頁面。事實上非常easy的問題,可是 讓我沒有預料到的是居然出現了岔子。以下展示我的效果圖及正確的代碼:
這些代碼是作為編輯昵稱:<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);//設置結果并進行傳輸this.setResult(PersonalDataEditAty.ATY_CODE_NICKENAME, resultFor);this.finish();} }Activity-B頁面:
跳轉button作跳轉監聽:
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攜帶過來的數據:
"+"token="+token+"&nick="+resetNickName, NormalFinalcons.NICK_NAME); } }
當中一些細節問題這里提一下:
在onActivityResult()。方法參數中參數--int resultCode? --int requestCode? --Intent data
當中,
resultCode:是Activity-A頁面 startActivityForResult(intent,resultCode); 中與該跳轉方法的第二個參數匹對且相等;
requestCode:是Activity-B頁面 setResult(requestCode, intent);中與該跳轉方法的第一個參數匹配且相等;
data:是Activity-B頁面 setResult(requestCode, intent);中與該跳轉方法的第二個參數匹配且相等。
注意:startActivityForResult(intent,resultCode);中的resultCode最好不要與setResult(requestCode, intent);中的requeCode相等。resultCode>0
最后解決實際問題:為什么我的全部的配置都做了。就是不能由B------->A的正常跳轉呢?
原因一:與 Activity 的載入模式(launchMode)有關;Activity的載入模式,在這樣的的跳轉的方式下要使用標準模式(我就是使用了 android:launchMode="singleTop"模式,結果不能正常跳轉)原因二:調用startActivityForResult的參數問題。即原先調用時這樣:startActivityForResult(intent, 0);是第二個參數的問題。該參數必須大于0才干在返回值,并激活onActivityResult方法。原因三:在TabHost的子Activity中startActivityForResult調用其它Activity時候遭遇到onActivityResult方法不響應的問題;
解決方式:
1.通過父Activity啟動其它Activity;2.實現父Activity的onActivityResult方法,將該處接收到的請求轉發給當前活動的子Activity;3.自己定義一個轉發接口用來實現第2步中的轉發功能;4.子Activity中實現第3步接口中的方法用來接收返回信息;?
代碼例如以下:
1.通過父Activity啟動其它Activity
getParent().startActivityForResult(new Intent(...), REQUEST_CODE);2.實現父Activity的onActivityResult方法
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// 獲取當前活動的Activity實例Activity subActivity = getLocalActivityManager().getCurrentActivity();//推斷是否實現返回值接口if (subActivity instanceof OnTabActivityResultListe<wbr>ner) {//獲取返回值接口實例OnTabActivityResultListe<wbr>ner listener = (OnTabActivityResultListe<wbr>ner) subActivity;//轉發請求到子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須要實現onTabActivityResult方法
@Overridepublic void onTabActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {//實現該處邏輯...}} /** <span>凡是Activity本身含有上次父類的情況都不能直接使用startActivityForResult。而要通過getParent()。通過父類調用此方法。</span> */?
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/hrhguanli/p/4679738.html
總結
以上是生活随笔為你收集整理的BUG系列:转让startActivityForResult()amp;onActivityResult()没有反应的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android HDMI 清晰度 分辨率
- 下一篇: 理解闭包