代码之家  ›  专栏  ›  技术社区  ›  nicolas asinovich

应该重构android。支持v4.app。DialogFragment到android。应用程序。对话框片段

  •  0
  • nicolas asinovich  · 技术社区  · 8 年前

    我应该在下面的自定义对话框类中重构代码。

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

    我想要转换它:

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

    收件人:

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

    我做不好重写这个:

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

    请告诉我怎么做对。

    1 回复  |  直到 8 年前
        1
  •  0
  •   nicolas asinovich    8 年前

    我找到了工作解决方案,但我不完全确定。我想看看你的评论。

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

    这里我重构如下:

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