1. 程式人生 > >android中的onActivityResult和setResult方法的使用,以及在fragment中的使用

android中的onActivityResult和setResult方法的使用,以及在fragment中的使用

 首先展示一個簡單使用示例,直接貼程式碼

  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()