Search code examples
androidandroid-fragmentsandroid-fragmentactivityandroid-dialogfragment

How to access in onActivityResult() method between two fragments in android?


I making demo application FragmentActivity between two fragments such as One is normal extends Fragment and Second is extends DialogFragment.

I will not handle in onActivityResult() method in First fragment because first fragment open dialog fragment ok press then access for that method.

Kindly help me Thanks for Advance

First Fragment Code,

public class MyListFragment extends Fragment {

    View mView;
    protected static final int REQ_CODE = 1010;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.list_fragment, container, false);
        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == REQ_CODE) {
                // Access here
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Solution

  • I found answer MYSELF,

    This is how I handle communication between fragment and dialog fragment,

    MyListFragment Code,

    public class MyListFragment extends Fragment {
    
        View mView;
        protected static final int REQ_CODE = 1010;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            mView = inflater.inflate(R.layout.list_fragment, container, false);
    
            Button mButton = (Button) mView.findViewById(R.id.button);
            mButton.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    MyDialogFragment dialog = new MyDialogFragment();
                    dialog.setTargetFragment(MyListFragment.this, REQ_CODE);
                    dialog.show(getFragmentManager(), "dialog");
                }
            });
    
            return view;
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode == Activity.RESULT_OK) {
                if (requestCode == REQ_CODE) {
                    // Access here
                    Log.i(TAG, "onActivityResult Access here method");
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    DialogFragment code,

    public class MyDialogFragment extends DialogFragment {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setMessage("My dialog message")
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    notifyToTarget(Activity.RESULT_OK);
                }
            })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    notifyToTarget(Activity.RESULT_CANCELED);
                }
            });
            return builder.create();
        }
    
        private void notifyToTarget(int code) {
            Fragment targetFragment = getTargetFragment();
            if (targetFragment != null) {
                targetFragment.onActivityResult(getTargetRequestCode(), code, null);
            }
        }
    }
    

    This code i hope help to us.