在一个项目中,我使用多个返回堆栈功能与底部导航标签。一切都工作正常,第一次进入目的地-与深层链接,用户交互-标签点击或通过导航编程。我使用2.5.2版本。BottomNavigationView是设置与setupWithNavController()
假设我们在底部导航中有A,B,C返回栈(根片段/根目的地)。重现的步骤(在[?]中是底部导航btns):
1. Click [B] tab - [B] becomes visible.
'''''''''''
' '
' B '
' '
' '
'''''''''''
[A] [B] [C]
2. Click [C] tab - [C] visible.
'''''''''''
' '
' C '
' (BNT) '
' '
'''''''''''
[A] [B] [C]
3. In [C] click (BNT) button, which moves [C]->[B] with additional information. [B] is visible, information is not passed.
'''''''''''
' '
' B '
' '
' '
'''''''''''
[A] [B] [C]
步骤3中的操作定义如下(我尝试将其作为全局和本地操作):
<action
android:id="@+id/action_C_to_B"
app:destination="@id/graph_B"
app:restoreState="true"
app:popUpTo="@id/destination_A"
app:popUpToSaveState="true">
<argument
android:name="informationInt"
app:nullable="false"
app:argType="integer" />
</action>
什么不起作用?如果我们多次输入操作中传递的参数,则它在目标B中永远不可用。我需要InformationInt after(BTN)以某种方式传递到目标[B]。
我所知道的:
1.参数是“不可变的”。它们在输入目标后设置,并在每次重新输入时恢复。这是因为设置了app:restoreState="true"
标志-这是可以的-我希望多个回栈功能记住其回栈状态。
1.无法再设定参数一次,因为:
/**
* Supply the construction arguments for this fragment.
* The arguments supplied here will be retained across fragment destroy and
* creation.
* <p>This method cannot be called if the fragment is added to a FragmentManager and
* if {@link #isStateSaved()} would return true.</p>
*/
public void setArguments(@Nullable Bundle args) {
if (mFragmentManager != null && isStateSaved()) {
throw new IllegalStateException("Fragment already added and state has been saved");
}
mArguments = args;
}
1.使用OnDestinationChangeListener没有帮助。它总是返回我们第一次输入目标时使用的参数。
我在寻找什么?我想把信息传递到目的地,同时在多个回栈结构中重新进入它。每个回栈必须记住它的状态。
1条答案
按热度按时间jdg4fx2g1#
我的理解是,当你回去的时候,你想带走一些信息,我会相应地给予我的答案。假设我们有一个片段b和c,当我们点击返回c时,我们将把数据传递给b
为此,我们用c语言编写
我们得到B片段中的数据