Search code examples
androidandroid-fragmentsandroid-dialogfragment

should refactor android.support.v4.app.DialogFragment to android.app.DialogFragment


I should refactor code in my custom dialog class below.

import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.util.Log;

public class BaseDialogFragment extends DialogFragment {
    public BaseActivity parentActivity;

    protected void showMessage(String title, String message) {
        MessageDialogFragment dialog = MessageDialogFragment.newInstance(title, message);
        dialog.setCancelable(false);
        dialog.show(parentActivity.getSupportFragmentManager(), MessageDialogFragment.TAG);
    }

    //...

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (getChildFragmentManager().getFragments() != null) {
            for (Fragment fragment : getChildFragmentManager().getFragments()) {
                if (fragment != null) {
                    fragment.onActivityResult(requestCode, resultCode, data);
                }
            }
        }
    }
}

And I want convert it:

android.support.v4.app.DialogFragment;
android.support.v4.app.Fragment;

to:

android.app.DialogFragment;
android.app.Fragment;

And I can not do it correct rewrite this:

for (Fragment fragment : getChildFragmentManager().getFragments()) {
                if (fragment != null) {
                    fragment.onActivityResult(requestCode, resultCode, data);
                }
            }

Please, tell me how to do it right.


Solution

  • I find work solution but I'm not completely sure about it. I want to see your comments.

    Add list fragments here:

    private List<WeakReference<Fragment>> fragList = new ArrayList<>();
    
        public List<Fragment> getActiveFragments() {
            ArrayList<Fragment> ret = new ArrayList<>();
            for (WeakReference<Fragment> ref : fragList) {
                Fragment f = ref.get();
                if (f != null) {
                    if (f.isVisible()) {
                        ret.add(f);
                    }
                }
            }
            return ret;
        }
    
        @Override
        public void onAttach(Activity act) {
            super.onAttach(act);
            if (act instanceof BaseActivity) {
                parentActivity = (BaseActivity) act;
                fragList.add(new WeakReference(getActiveFragments()));
            }
        }
    

    And here i refactor like this:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (getChildFragmentManager().getBackStackEntryCount() > 0) {
            for (WeakReference<Fragment> fragmentWeakReference : fragList) {
                fragmentWeakReference.get().onActivityResult(requestCode, resultCode, data);
            }
        }
    }