Jetpack 导航:如何从 recyclerview 适配器打开新片段?
Jetpack navigation: How do I open a new fragment from a recyclerview adapter?
我通常从现有片段或 activity 打开一个新片段。但是,对于可以在多个片段/活动中使用的适配器,如何动态打开特定片段?
我通常使用下面这段代码:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
在导航图中创建动作后。
由于导航发生在片段之间,因此通常您会保留片段的责任。
正如您所说,适配器可以在多个片段中使用,所以它应该一次附加到一个特定的片段,通常是实例化它的片段。
因此,您可以将侦听器接口传递给由片段实现的适配器;每当您想导航到导航图中的另一个片段时,您都可以在适配器中触发它的回调。
该回调方法会在已经实现监听的fragment处执行,可以正常使用传统导航代码:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
这样你的适配器就可以被重用,每次片段想要重用它时,它都应该实现监听器。
注意: 可能您可以将 int
参数传递给侦听器回调,将适配器中的行号传回片段,以便您决定导航到其他片段。
这样你就可以只通过片段保持导航。
我通常从现有片段或 activity 打开一个新片段。但是,对于可以在多个片段/活动中使用的适配器,如何动态打开特定片段?
我通常使用下面这段代码:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
在导航图中创建动作后。
由于导航发生在片段之间,因此通常您会保留片段的责任。
正如您所说,适配器可以在多个片段中使用,所以它应该一次附加到一个特定的片段,通常是实例化它的片段。
因此,您可以将侦听器接口传递给由片段实现的适配器;每当您想导航到导航图中的另一个片段时,您都可以在适配器中触发它的回调。
该回调方法会在已经实现监听的fragment处执行,可以正常使用传统导航代码:
Navigation.findNavController(view).navigate(R.id.action_startFragment_to_destinationFragment);
这样你的适配器就可以被重用,每次片段想要重用它时,它都应该实现监听器。
注意: 可能您可以将 int
参数传递给侦听器回调,将适配器中的行号传回片段,以便您决定导航到其他片段。
这样你就可以只通过片段保持导航。