preg_match_all($regex, $string, $result);
以及如何找到片段A的实例以便能够与之交互?
答案 0 :(得分:-1)
想知道以便澄清自己。为什么导航到片段B时不希望破坏片段A?
猜想是否不想释放片段A的状态,可以在viewModel中对其进行初始化,然后在其活动的onCreate(无论您确定片段的哪种生命周期方法都适合)中进行检索。如果不是这个原因,plz会解释为我们提供更好的环境。
用于导航片段将片段交换出容器的方法。 here's a brief summary of the navigation library
As per the docs(我建议您阅读该文件,因为这是一个冗长的过程,带有很多模糊的单词。
假设您至少使用Android Studio 3.3或更高版本,
1- add navigation library to project.
dependencies {
def nav_version = "2.0.0"
implementation "androidx.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "androidx.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
2-创建导航图。
要将导航图添加到项目中,请执行以下操作:
在“项目”窗口中,右键单击res目录,然后选择“新建”>“ Android资源文件”。
出现“新资源文件”对话框。 在“文件名”字段中输入一个名称,例如“ nav_graph”。
从“资源类型”下拉列表中选择“导航”,然后单击“确定”。
3- Add a navhost to an activity
在您要进行交换的父活动的xml视图中。在这种情况下,其视图构成要在其中进行交换的容器视图的活动,请添加以下具有适当导航图名称的代码段。
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:defaultNavHost="true"
app:navGraph="@navigation/my_navigation_graph_file_name" />
未将defaultNavHost属性设置为true,以向导航库表示应该接管后退按钮和向上按钮的处理,以便以直观的方式在应用程序内正确导航。
6- Add destinations to the graph.
有三种方法可以将目的地添加到导航图。您可以从现有片段(您已经在问题上下文中交换的片段)或活动中创建目标,创建新目标,或创建占位符以稍后用片段或活动替换。
要使用导航编辑器添加新的目的地类型,请执行以下操作:
在导航编辑器中,单击“新建目标”图标,然后单击“创建新目标”。
在出现的“新建Android组件”对话框中,创建片段。有关片段的更多信息,请参阅片段文档。
7- Designate a destination as the start destination
所有目标位置就绪后,您可以通过以下操作选择开始目标:
在“设计”选项卡中,单击目标以突出显示它。
右键单击目标,然后单击“设置为起始目标”。
在“设计”选项卡中,将鼠标悬停在您要用户导航的目标的右侧。目的地的右侧会出现一个圆圈。
在您希望用户导航到并释放的目标上单击并拖动光标。两个目标之间的结果线代表一个动作。
单击箭头以突出显示操作。以下属性出现在“属性”面板中:
“类型”字段包含“操作”。 ID字段包含操作的ID。 “目标”字段包含目标片段或活动的ID。
单击“文本”选项卡以切换到XML视图。现在将动作元素添加到源目标。该操作具有一个ID和一个目标属性,其中包含下一个目标的ID,如下图所示:
使用NavController(可在NavHost中管理应用程序导航的对象)完成到目的地的导航。每个NavHost都有自己的对应NavController。
要获取片段,活动或视图的NavController,请使用以下方法之一:
NavHostFragment.findNavController(Fragment)
Navigation.findNavController(Activity, @IdRes int viewId)
Navigation.findNavController(View)
一旦检索到NavController,请使用其Navigation()方法导航到目标位置。 navigation()方法接受操作或目标的资源ID。
button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment_destination_name, null));
导航库必须为我们提供更多精彩的东西,以便我们为Android开发者提供服务。避免冗长的答案,这就是为什么我没有包含所有内容的原因。建议您整体查看导航库和android体系结构组件的官方文档。希望这会有所帮助。