FragmentActivity
私はsである2つのタブを持つを持っていますListFragment
。それぞれListFragment
にコールバックがあります。
コールバックの例
コールバックはonAttach(...)メソッド内に関連付けられています
OnStatusUpdateListener mStatusUpdateCallback;
public interface OnStatusUpdateListener {
public void onStatusUpdate();
}
@Override
public 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");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
後で、FragmentActivity
正常に機能するこのコールバックによって通信します。
内にListFragment
、コールバックもあるImageButton
aを呼び出すがあります。DialogFragment
このコールバックはmyに実装されており、 nullListFragment
のコールバックをトリガーします。
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: main
java.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$1$1.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)