android - 带有 Dagger 的 AlertDialog - 您必须先在 child 的 parent 上调用 removeView() - Android

标签 android android-alertdialog dagger-2

我正在使用 AlertDialogDagger,如下所示:

@Module(includes = {
        WorkTableFragmentModule.WorkTableAPIViewAbstractModule.class,
        RemoteAPIDataModule.class
})
public class WorkTableFragmentModule {
  ...Some code...
      @Provides
    final AlertDialog.Builder alertDialogAccess(WorkTableFragment workTableFragment) {
        return new AlertDialog.Builder(Objects.requireNonNull(workTableFragment.getActivity()));
    }
    @Provides
    LayoutInflater layoutInflater(WorkTableFragment workTableFragment) {
        return Objects.requireNonNull(workTableFragment.getActivity()).getLayoutInflater();
    }
    @Provides
    View viewDialogAccess(LayoutInflater layoutInflater) {
        final ViewGroup nullParent = null;
        return layoutInflater.inflate(R.layout.dialog_access_share, nullParent);
    }
}

Fragment 如下所示:

public class WorkTableFragment extends DaggerFragment{
@Inject
AlertDialog.Builder alertDialogAccess;
@Inject
View accessAlertDialogView;
@Inject
LayoutInflater inflater;

    private void accessAlertDialog() {
        if (getActivity() != null && isAdded()) {
            alertDialogAccess.setCancelable(false);
            new DialogViewHolderAcceptShare(accessAlertDialogView);
            alertDialogAccess.setView(accessAlertDialogView);
            dismissAccessDialog = alertDialogAccess.show();
        }
    }
}

但是让我报错:

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:4656)
        at android.view.ViewGroup.addView(ViewGroup.java:4497)
        at android.view.ViewGroup.addView(ViewGroup.java:4469)
        at android.support.v7.app.AlertController.setupCustomContent(AlertController.java:657)
        at android.support.v7.app.AlertController.setupView(AlertController.java:475)
        at android.support.v7.app.AlertController.installContent(AlertController.java:233)
        at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:279)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:642)
        at android.app.Dialog.show(Dialog.java:341)
        at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:1007)
        at xx.xx.xx.fragments.worktablefragment.WorkTableFragment.accessAlertDialog(WorkTableFragment.java:343)
        at xx.xx.xx.fragments.worktablefragment.WorkTableFragment.onRequestPermissionsResult(WorkTableFragment.java:409)
        at android.support.v4.app.FragmentActivity.onRequestPermissionsResult(FragmentActivity.java:860)
        at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7434)
        at android.app.Activity.dispatchActivityResult(Activity.java:7260)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4468)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4515) 
        at android.app.ActivityThread.-wrap22(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1687) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6682) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

最佳答案

像下面这样解决了我的问题:

private void accessAlertDialog() {
    if (getActivity() != null && isAdded()) {
        if (dismissAccessDialog == null) {
            alertDialogAccess.setCancelable(false);
            new DialogViewHolderAcceptShare(accessAlertDialogView);
            alertDialogAccess.setView(accessAlertDialogView);
            dismissAccessDialog = alertDialogAccess.show();
        }else {
            dismissAccessDialog.show();
        }
    }
}

关于android - 带有 Dagger 的 AlertDialog - 您必须先在 child 的 parent 上调用 removeView() - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53613474/

相关文章:

java - 自定义alertdialog android api 10

android - 在刚刚完成的进度对话框中显示警报对话框android

android - 从 ViewModel 访问 strings.xml

java - 我的 ViewModel 无法在配置更改后继续存在

java - 是否可以仅针对特定风格包含并初始化 HockeyApp SDK?

android - 类似于 Youtube 应用程序的标题栏

android - 使用 AlertDialog.Builder 显示软键盘(数字)

android - 当我可以使用静态函数时,为什么要使用 Dagger 或 Hilt DI?

Android TV - SearchBar 焦点

android - 通过单个 API 请求获取所有 Parse 对象