Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我得到了java.lang.IllegalStateException:更新androidX库时没有活动错误_Android_Android Alertdialog_Androidx - Fatal编程技术网

我得到了java.lang.IllegalStateException:更新androidX库时没有活动错误

我得到了java.lang.IllegalStateException:更新androidX库时没有活动错误,android,android-alertdialog,androidx,Android,Android Alertdialog,Androidx,我在显示对话框时出现此错误 错误:- 当我在androidx的库下面更新时出现此错误 1。“androidx.appcompat:appcompat:1.1.0-rc01”的实现 2。实现'com.google.android.material:material:1.1.0-alpha09' -----这是我的确认对话框---- -----这是我的基本对话框---- ---最后,这是我调用Confirmdialog的时候--- 对话框片段应该在内部处理单击事件,而不是在初始化它的活动/片段中

我在显示对话框时出现此错误

错误:-

当我在androidx的库下面更新时出现此错误

1。“androidx.appcompat:appcompat:1.1.0-rc01”的实现

2。实现'com.google.android.material:material:1.1.0-alpha09'

-----这是我的确认对话框----

-----这是我的基本对话框----

---最后,这是我调用Confirmdialog的时候---


对话框片段应该在内部处理单击事件,而不是在初始化它的活动/片段中

为了在对话框片段和活动之间进行通信,创建由活动实现的接口

比如说

interface DialogFragmentResultListener {
    fun onDialogResultReceived(requestCode: Int, isPositive: Boolean)
}
并按如下方式传递DialogFragment的结果:

   if (activity is DialogFragmentResultListener) {
                        ......
   }
您可以尝试: 显示(ConfirmDialog,活动); 相反 show(ConfirmDialog,this);
传递活动的上下文或实例

您可以像这样尝试-

BaseDialogFragment-

 abstract class BaseDialogFragment : DialogFragment(), View.OnClickListener, BaseView {

override fun onClick(v: View?) {
}

abstract fun initObjects()

abstract fun registerListeners()

abstract fun initWidgets()

protected fun setFullScreen() {
    val width = ViewGroup.LayoutParams.MATCH_PARENT
    val height = ViewGroup.LayoutParams.MATCH_PARENT
    dialog?.window?.setLayout(width, height)
}

override fun onNetworkFailure(errorCode: Int, errorMessage: String?) {
    (activity!! as BaseActivity).onNetworkFailure(errorCode, errorMessage)
}

override fun onResponseFailure(error: CloudError?) {
    (activity!! as BaseActivity).onResponseFailure(error)

}

override fun showLoader(msg: String?) {
    (activity!! as BaseActivity).showLoader(msg)

}

override fun showLoader(msg: String?, isCancellable: Boolean?) {
    (activity!! as BaseActivity).showLoader(msg, isCancellable)

}

override fun dismissLoader() {
    (activity!! as BaseActivity).dismissLoader()
}
}

像这样创建确认对话框-

public class AddEmailDialogFragment extends BaseDialogFragment implements View.OnClickListener {
public static final String TAG = AddEmailDialogFragment.class.getSimpleName();
private Button btnSubmit;
private EditText etEmail;

private GetEmailCallback getEmailCallBack;

public static AddEmailDialogFragment newInstance() {
    return new AddEmailDialogFragment();
}

public void setListener(GetEmailCallback listener) {
    getEmailCallBack = listener;
}

@Nullable
@Override
public View onCreateView(@NotNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_askemail, container, false);

}

@Override
public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    initObjects();
    initWidgets();
    registerListeners();
}

@Override
public void initObjects() {

}

@Override
public void registerListeners() {
    btnSubmit.setOnClickListener(this);

}

@Override
public void initWidgets() {
    View view = getView();
    btnSubmit = view.findViewById(R.id.btn_submit);
    etEmail = view.findViewById(R.id.et_email);

}

@Override
public void onClick(View view) {
    if (view.getId() == R.id.btn_submit) {
        saveEmail();
    }
}

private boolean isValidEmail(String target) {
    return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
}

private void saveEmail() {
    if (isValidEmail(etEmail.getText().toString()))
        getEmailCallBack.gotEMail(etEmail.getText().toString());
    else
        etEmail.setError(getString(R.string.err_invalidEmail));
}
}

并使用以下命令调用对话框片段-

    val activity = activity
        if (null != activity) {
            addEmailDialogFragment = AddEmailDialogFragment.newInstance()
            addEmailDialogFragment!!.show(getActivity()!!.supportFragmentManager, AddEmailDialogFragment.TAG)
            addEmailDialogFragment!!.isCancelable = false
            addEmailDialogFragment!!.setListener(this)
        }

在更新androidx appcompat依赖项的版本后,我遇到了这个问题。 我已通过以下解决方案暂时解决了此问题

使用

implementation 'androidx.appcompat:appcompat:1.0.2'
而不是

implementation 'androidx.appcompat:appcompat:1.1.0'

可能重复@Lokesh的重复我不认为这是重复的。因为我可以很好地运行这段代码,除非我不升级androidX库。为什么要使用“dialogFragment.onCreate(null);”。这是生命周期方法,在后台做很多可能需要活动的事情。检查您是否正在使用androidX,然后您的片段、fragmenmenger所有您使用的东西都必须从androidX扩展,并检查您在此my case activity=classname.this中使用的东西。。我将其定义为一个全局变量,您可以尝试将其作为第二个参数/可以从您的活动传递应用程序上下文您正在作为活动实例传递。但在BaseDialogFragment show(BaseDialogFragment dialogFragment,Context-Context)中,方法是Context,再次是createDialog(getActivity());你正在通过考试。。您也可以像这样尝试(BaseDialogFragment dialogFragment,Activity活动)更改此行并尝试
    val activity = activity
        if (null != activity) {
            addEmailDialogFragment = AddEmailDialogFragment.newInstance()
            addEmailDialogFragment!!.show(getActivity()!!.supportFragmentManager, AddEmailDialogFragment.TAG)
            addEmailDialogFragment!!.isCancelable = false
            addEmailDialogFragment!!.setListener(this)
        }
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.appcompat:appcompat:1.1.0'