我得到了java.lang.IllegalStateException:更新androidX库时没有活动错误
我在显示对话框时出现此错误 错误:- 当我在androidx的库下面更新时出现此错误 1。“androidx.appcompat:appcompat:1.1.0-rc01”的实现 2。实现'com.google.android.material:material:1.1.0-alpha09' -----这是我的确认对话框---- -----这是我的基本对话框---- ---最后,这是我调用Confirmdialog的时候---我得到了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的时候--- 对话框片段应该在内部处理单击事件,而不是在初始化它的活动/片段中
对话框片段应该在内部处理单击事件,而不是在初始化它的活动/片段中 为了在对话框片段和活动之间进行通信,创建由活动实现的接口 比如说
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'