使用 Android 片段中的后退按钮
Using the back button from a fragment in Android
我的目标是以下行为。
当我在主界面时 activity,
如果我导航到片段 1,
然后从那里导航到片段 2,
然后当我点击 phone 的后退按钮时,
因为我在片段 2 上,所以我返回到主屏幕,而不是片段 1。
如果我在页面上有一个单独的按钮,这种行为会很容易,因为我可以这样做:
Button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
我 运行 遇到了困难,因为我需要使用 phone 自己的后退按钮。我读到 OnButtonPressed() 事件只能由 activity 使用,而不是片段,并且将这种逻辑移动到 activity 中被证明是困难的!
我怎样才能实现我想要的行为?
添加片段时,您需要将事务添加到后台堆栈。这意味着您希望在按下后退按钮时撤销此交易。
请使用以下代码:
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
您可以在 :
中找到更多详细信息
https://developer.android.com/training/implementing-navigation/temporal.html
只需跟踪 backstackcount,你就可以根据计数做任何你想做的事:
@Override
public void onBackPressed() {
manageBackStack();
}
private void manageBackStack() {
switch (getSupportFragmentManager().getBackStackEntryCount()) {
case 1:
//Do when count is 1
break;
case 2:
//Do when count is 2
break;
default:
finish();
}
}
希望对您有所帮助:)
我的目标是以下行为。
当我在主界面时 activity, 如果我导航到片段 1, 然后从那里导航到片段 2, 然后当我点击 phone 的后退按钮时, 因为我在片段 2 上,所以我返回到主屏幕,而不是片段 1。
如果我在页面上有一个单独的按钮,这种行为会很容易,因为我可以这样做:
Button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
我 运行 遇到了困难,因为我需要使用 phone 自己的后退按钮。我读到 OnButtonPressed() 事件只能由 activity 使用,而不是片段,并且将这种逻辑移动到 activity 中被证明是困难的!
我怎样才能实现我想要的行为?
添加片段时,您需要将事务添加到后台堆栈。这意味着您希望在按下后退按钮时撤销此交易。
请使用以下代码:
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
您可以在 :
中找到更多详细信息https://developer.android.com/training/implementing-navigation/temporal.html
只需跟踪 backstackcount,你就可以根据计数做任何你想做的事:
@Override
public void onBackPressed() {
manageBackStack();
}
private void manageBackStack() {
switch (getSupportFragmentManager().getBackStackEntryCount()) {
case 1:
//Do when count is 1
break;
case 2:
//Do when count is 2
break;
default:
finish();
}
}
希望对您有所帮助:)