android中的onActivityResult和setResult方法的使用,以及在fragment中的使用
阿新 • • 發佈:2019-02-01
首先展示一個簡單使用示例,直接貼程式碼
Fragment中的程式碼
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //跳轉到需求任務子表,需要傳對應的引數,每個item點選進入的任務子表不一樣 Intent intent = new Intent(); //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //注意點1 //TODO 傳入這個介面資料請求到的ID intent.putExtra("position",position); intent.setClass(getActivity(), SoMaterialRqChildActivity.class); //getActivity().startActivityForResult(intent, REQUEST_CODE); //注意點
2 startActivityForResult(intent, REQUEST_CODE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == 2) { if (requestCode == 1) { int position = data.getIntExtra("position", 0); mLists.remove(position); adapter.notifyDataSetChanged(); } } }//注意點1 //TODO 傳入這個介面資料請求到的ID intent.putExtra("position",position); intent.setClass(getActivity(), SoMaterialRqChildActivity.class); //getActivity().startActivityForResult(intent, REQUEST_CODE); //注意點2 startActivityForResult(intent, REQUEST_CODE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == 2) { if (requestCode == 1) { int position = data.getIntExtra("position", 0); mLists.remove(position); adapter.notifyDataSetChanged(); } } }
對應管理Fragment的Activity的程式碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //注意點3
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 2) {
Fragment fragment = fmanager.findFragmentById(R.id.ll_common_content);
fragment.onActivityResult(requestCode, resultCode, data);
}
}
//注意點3
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 2) {
Fragment fragment = fmanager.findFragmentById(R.id.ll_common_content);
fragment.onActivityResult(requestCode, resultCode, data);
}
}
跳轉後的Activity中的程式碼
Intent intent = new Intent();
int position = getIntent().getIntExtra("position", 0);
intent.putExtra("position", position);
setResult(RESULT_CODE, intent); //注意點4
finish();
//注意點4
finish();
看到這裡,相信大家一目瞭然了,在此對上面4個注意點進行解釋
注意點1:Activity跳轉的時候,不能加入此Flag,原因嘛,自行體會
注意點2:Fragment中使用這個方法時,不需要用getActivity()方法
注意點3:管理Activity中必須要重寫onActivityResult()方法
注意點4:setResult中傳入的引數RESULT_CODE,必須>0
除此之外,需要大家注意的是:
就是關於Activity啟動的模式為standard或者singleTop,
SingleTask以及SingleInstance均不會奏效
呼叫onActivityResult方法會在setResult之前,這並不是我們想要的。
正確的呼叫順序:
startActivityForResult()-->setResult()--->onActivityResult()