android– 方向更改后的回调变为null

android– 方向更改后的回调变为null,第1张

概述我有一个FragmentActivity,有两个选项卡是ListFragments.每个ListFragment都有一个回调.回调的一个例子回调与onAttach(…)方法内部相关联OnStatusUpdateListenermStatusUpdateCallback;publicinterfaceOnStatusUpdateListener{publicvoidonStatusUpdate();}@O

我有一个FragmentActivity,有两个选项卡是ListFragments.每个ListFragment都有一个回调.

回调的一个例子

回调与onAttach(…)方法内部相关联

OnStatusUpdateListener mStatusUpdateCallback;public interface OnStatusUpdateListener {    public voID onStatusUpdate();}@OverrIDepublic voID onAttach(Activity activity) {    Log.d(TAG, "onAttach");    super.onAttach(activity);    try {        mStatusUpdateCallback = (OnStatusUpdateListener)activity;    } catch (ClassCastException e) {        throw new ClassCastException(activity.toString() + " must implement OnStatusUpdateListener");    }}@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    Log.d(TAG, "onCreate");    super.onCreate(savedInstanceState);    setRetainInstance(true);}

后来,我通过这个回调与FragmentActivity进行通信,它正常工作.

在ListFragment中,我有一个Imagebutton,它将调用一个也有回调的DialogFragment.此回调在我的ListFragment中实现,并且触发回调为null

public voID onStatusOption() {    Log.d(TAG, "onStatusOption");    // Update stuff    // Here is where mStatusUpdateCallback is null after rotate    mStatusUpdateCallback.onStatusUpdate();}

问题是,如果我在应用程序运行时旋转手机,mStatusUpdateCallback将变为null.这当然意味着我无法执行回调.有谁知道如何解决这一问题?

我试过的

根据https://stackoverflow.com/a/6029070/935779,似乎可能已经创建了对OnStatusUpdateListener的新引用,因此我无法引用旧的,但不提供解决方案.

我也尝试按照https://stackoverflow.com/a/6787393/935779保留状态,但据我所知,我无法保存对回调的引用.

我也不愿意做androID:configChanges =“orIEntation | keyboardHIDden”方法,因为这看起来像是一个黑客,我的布局在景观中发生了变化.

堆栈跟踪

FATAL EXCEPTION: mainjava.lang.NullPointerException    at com.blug.blah.Fragment.StatusFragment.onStatusOption(StatusFragment.java:197)    at com.blug.blah.MyActivity.onStatusOption(MyActivity.java:243)    at com.blug.blah.Dialog.StatusOptionDialog.onClick(StatusOptionDialog.java:108)    at com.androID.internal.app.AlertController$buttonHandler.handleMessage(AlertController.java:158)    at androID.os.Handler.dispatchMessage(Handler.java:99)    at androID.os.Looper.loop(Looper.java:123)    at androID.app.ActivityThread.main(ActivityThread.java:4627)    at java.lang.reflect.Method.invokeNative(Native Method)    at java.lang.reflect.Method.invoke(Method.java:521)    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)    at dalvik.system.NativeStart.main(Native Method)

解决方法:

当Activity的配置被销毁并重新创建时.

当手机配置发生变化时,调用onConfigurationChange方法.

因此,您可以在onConfigurationChange中初始化回调

总结

以上是内存溢出为你收集整理的android – 方向更改后的回调变为null全部内容,希望文章能够帮你解决android – 方向更改后的回调变为null所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1118924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存