我有一個只使用一個活動的應用程序。在里面,我加載了一個帶有 recyclerview 的片段。recyclerview 中的每個項目都是一個對話框片段。用戶可以更改項目,因此當對話框關閉時,recyclerview 會更新。我現(xiàn)在遇到的問題是,當應用程序在對話框處于活動狀態(tài)時旋轉時,recyclerview 在對話框關閉后不會更新。我的對話框在被銷毀時會與應用程序中的所有內容一起重新創(chuàng)建,因此我懷疑 dismisslistener 在重新創(chuàng)建時會被銷毀。該對話框公開了一種方法來設置 dismisslistener,然后覆蓋該事件以檢查是否已設置。public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { this.onDismissListener = onDismissListener;}@Overridepublic void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (onDismissListener != null) { onDismissListener.onDismiss(dialog); }}然后我在onViewBindHolderrecyclerview中設置了一個 dismisslistenereditor.setOnDismissListener(dialog -> { recycler.getAdapter().notifyDataSetChanged();}我不確定為什么會發(fā)生這種情況,但似乎在更改方向并重新創(chuàng)建所有內容之后,recyclerview 從未更新過。我發(fā)現(xiàn)該方法仍然被調用,因為在 ondismisslistener 內部是另一個函數(shù),它更新了另一個視圖,getView().findViewById()然后由于返回 null 而使應用程序崩潰getView。我在這里找不到關于此的任何其他帖子。有誰知道我如何修復 dismisslistener 或任何其他等待 dialogfragment 關閉的方法?
2 回答

月關寶盒
TA貢獻1772條經驗 獲得超5個贊
您是否已將 android:configChanges="orientation|screenSize" 添加到 AndroidManifest 中的活動中?否則嘗試 (onRestoreInstanceState() 和 onSaveInstanceState()

慕的地10843
TA貢獻1785條經驗 獲得超8個贊
好吧,我發(fā)現(xiàn)出了什么問題。重新創(chuàng)建時,對話框會丟失所有變量,就像其他所有內容一樣。
理論上可以將這些變量保存在包中并在重新創(chuàng)建時再次獲取它們,但我還沒有找到使用 OnClickListener 執(zhí)行此操作的方法,因為傳遞給包的對象必須是可序列化或可解析的。
因此,通過檢查 OnCreate,當對話沒有任何變量時,我的對話現(xiàn)在就被取消了。
添加回答
舉報
0/150
提交
取消