簡體   English   中英

Android導航架構組件避免了Fragment娛樂

[英]Android Navigation Architecture component avoid Fragment recreation

我有以下流程,其中Fragment的內容是具有各種輸入字段的表單。

片段A - >片段B - >片段C - >片段D ......

例如,當用戶完全填充了Frag C並返回到Frag B時,所有Frag B數據都被存儲並保持完整,但是當向前移回C時,所有輸入數據都消失了。 想象一下同樣的場景,用戶填充片段A,B並且他已經填充了一半的Frag C字段,並且他選擇回到Frag A,當他導航回來時,所有輸入數據在之前的Frags上完好無損(B和A),但是一旦他決定向前移回C所在的位置,B和C的數據就會丟失,並在每一個新步驟中都被新的片段替換。 因此輸入數據僅在返回時保留(android后退按鈕),當他打開之前已經存在的Fragment時,會創建一個所有輸入為空的新片段。 每當用戶向后移動或在導航架構組件上向前移動時,是否可以將片段保持為唯一?

這不是一種停止片段娛樂的方法,但它可以解決您的問題。 創建一個活動范圍的ViewModel來保存表單數據,然后讓您的片段觀察此ViewModel。 ViewModel將比片段更長,因此當它們被重新創建時,它們將使用您先前存儲在ViewModel中的值。

如何實現ViewModel

將視圖保存在變量中並檢查是否為view!= null然后膨脹

  private var mView: View? = null

  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                            savedInstanceState: Bundle?): View? {
    return if(mView == null) {
      val v = inflater.inflate(R.layout.chat_fragment, container, false)
      initializeView(v)
      mView = v
      v
    }else{
      mView
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM