我们如何通过按下返回按钮
来停止从当前片段中重新加载的片段ex。好像我们正在从列表碎片转移到后面的详细信息片段,而无需通过使用Android Jet Pack和Navigation Architecture再次重新加载列表 - 派别
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation_graph" />
导航组件截至目前仅支持片段更换。因此,您将无法通过手动片段交易来添加((片段。
但是,如果您的担心是要重新膨胀布局并重新获取片段的数据,则可以通过以下两种方法轻松解决它。
- 创建视图后,将其存储在变量中,并在调用onCreateview((时使用它。
private var view: View? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (view == null) {
view = inflater.inflate(R.layout.fragment_list, container, false)
//...
}
return view
}
来源:https://twitter.com/ianhlake/status/11035222856565638016
- 使用片段的ViewModel,并将所需的数据作为成员变量。通过这种方式,当您更换关联的片段时,将无法清除数据。ViewModel仅在片段的Ondestroy((上清除,这只有在您破坏父活动时才发生。https://developer.android.com/images/topic/libraries/architecture/viewmodel-lifecycle.png