Fragment返回Fragment傳值


FragmentA 啟動FragmentB ,然后FragmentB做完事情,返回結果給FragmentA

事例呆木如下:

先在FragmentA中啟動目標FragmentB

FragmentA fromFragment=new FragmentA();
FragmentB toFragment=new FragmentB();
//注意下面這一句,必須要指定目標Fragment
toFragment.setTargetFragment(fromFragment,100);

//隱藏FragmentA顯示FragmentB
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction().setTransition(android.R.animator.fade_in);
transaction.hide(fromFragment)
           .add(R.id.switch_frameLayout, toFragment)
           .addToBackStack(null)
           .commit();

 

在目標FragmentB中處理業務

    //自己寫個方法,開始返回       
    private void onTakePhotoResult() {
        sendResult(Activity.RESULT_OK);
        getFragmentManager().popBackStack();//從任務棧中彈出

    }

    private void sendResult(int resultOK) {
        if (getTargetFragment() == null) {
            return;
        } else {
            //把需要返回的數據存放到Intent中
            Intent i = new Intent();
            i.putExtra("photoPath", tempPhotoPath);
            getTargetFragment().onActivityResult(getTargetRequestCode(), resultOK, i);
        }
    }

FragmentA中重寫onActivityResult()方法接收返回的結果數據

 

 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (resultCode == Activity.RESULT_OK) {
         //開始接收返回的數據
         String photoPath = data.getStringExtra("photoPath");
     }
 }

 

這個可能會遇到一個問題:result回來的結果fragment有可能沒收到,這個是因為activity攔截了返回結果。

由於fragment是寄存在activity中的,那么在fragment返回給fragment值的時候就有可能出現被攔截的情況。這個我也是調試了很久才發現被攔截的。

解決方法也非常簡單,就是在activity的onActivityResult()方法中轉發一下結果數據給對應的fragment就好了。具體實現代碼如下:

重寫activity的onActivityResult()方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   //轉發返回的結果給fragment
   fragment.onActivityResult(requestCode,resultCode,data);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM