我有一个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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)