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.
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);
}
}
}