Android导航架构组件可避免片段重新生成

时间:2018-12-08 11:13:43

标签: android android-fragments

我有以下流程,其中Fragment的内容是具有各种输入字段的表单。

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

例如,当用户完全填充Frag C并移回Frag B时,所有Frag B数据都存储并保持不变,但是当移回C时,所有输入数据都消失了。 想象一下相同的场景,用户填充了Frag A,B,并且他已经填充了Frag C字段的一半,并且当他导航回先前的Frags(B和B上的所有输入数据)时,他选择返回FragA。 A),但是一旦他决定返回他所在的C,B和C中的数据就会丢失,并在每个新步骤中都将其替换为新的片段。 因此,仅当返回时才保留输入数据(android后退按钮),当他打开之前曾去过的Fragment时,会创建一个新的Fragment,所有输入均为空白。 每当用户在导航体系结构组件上向后移动或向前移动时,是否可以将片段保持为唯一?

2 个答案:

答案 0 :(得分:0)

这不是停止片段重新播放的方法,但是可以解决您的问题。创建一个活动范围的ViewModel来保存表单数据,然后让您的片段观察此ViewModel。 ViewModel的寿命将超过这些片段,因此在重新创建它们时,它们将使用您先前存储在ViewModel中的值。

How to implement ViewModel

答案 1 :(得分:0)

将视图保存到变量中,然后检查视图!= 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
    }
  }