- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SO 上看到了许多 popbackstack 问题,根据我的代码,我尝试做的事情看起来应该可行。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content_frame, new MainFragment());
ft.addToBackStack("Attend"); //here is the add to backstack
ft.commit();
}
这显示了我的空白布局中的主要 fragment 。
稍后我有一个 onOptionsItemSelected 启动一个新 fragment 。
FragmentManager fm1 = getFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
ft1.replace(R.id.content_frame, new ServiceFragment());
ft1.addToBackStack("ServiceTimes");
ft1.commit();
return true;
这个 fragment 出现了。这是问题开始的地方。我按下后退按钮希望返回到主要 fragment 。
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if(fm.getBackStackEntryCount() > 0) {
Toast.makeText(getApplicationContext(),"popstack",Toast.LENGTH_SHORT).show();
fm.popBackStackImmediate("Attend", fm.POP_BACK_STACK_INCLUSIVE);
} else {
Toast.makeText(getApplicationContext(),"Super",Toast.LENGTH_SHORT).show();
super.onBackPressed();
}
}
我添加了一个 Toast 弹出窗口来告诉我发生了什么,当按下后退按钮时,我得到一个空白屏幕,上面有“popstack”Toast 消息(告诉我“if”语句是正确的)。当我再次点击它时我得到“ super ”(这又是我所期望的)。
我不明白为什么我的代码不会返回到主要 fragment ?
最佳答案
需要记住的关键是,返回堆栈包含事务,而不是 fragment 。
因为您使用的是 POP_BACK_STACK_INCLUSIVE
标志,当您点击后退按钮时,名称为 "Attend"
的事务也会被弹出(即撤消)。因为此事务以编程方式添加了您的第一个 fragment ,所以您将返回到 Activity 的初始状态(容器中没有 ID 为 content_frame
的 fragment )。
适当的解决方案完全取决于您要实现的目标(可以添加多少 fragment ,您是否总是希望在返回时返回到第一个 fragment 等)您可能需要考虑不添加初始事务到后栈。或者您可以添加它,但不使用 inclusive 标志,并且仅在返回堆栈条目计数大于 1 时才使用您的自定义 onBackPressed 逻辑。
关于android - onBackPressed() popBackStack 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670571/
我有一个包含 2 个 Activity 的应用程序,第一个是从 http 加载数据并显示标题,第二个是特定标题的详细信息。 在硬件上从第二个屏幕按下第一页不会重新加载,这很好。 在后面的操作栏上,页面
我试图返回确认对话框,因此我决定处理 onbackpressed(),然后我将我的代码用于确认对话框,并为 null 监听器设置了 ok 和取消按钮。 @Override public void on
我有三个 java Activity : MainActivity 是您打开应用程序时的第一个屏幕。另外两个是PlayActivity和GuessActivity我在 Play 和 Guess Act
我已经坚持了好几天了。我有一个 Activity 。我实现了 @Override public void onBackPressed() { Log.e("TEST", "Pressed ba
我有一个带有 BottomNavigation 的应用程序(3 个项目)。 Item 1 加载 Fragment 1,Item 2 加载 Fragment 2,Item 3 加载 Fragment 3
我想在我的动态壁纸设置上实现 Appbrain 插页式广告, 我按照 - http://www.appbrain.com/info/sdk-docs/interstitial.html 上给出的步骤进
我有一个问题,这里也讨论了这个问题: onBackPressed never gets called 我试图在按下 Android 手机上的 native 后退按钮时取消倒计时计时器。所以我想重写 o
我尝试使用以下内容配置“后退”按钮: Public void onBackPressed(){return;} 但它不会产生任何东西(我也尝试过 super.onBack... 和 finish)。我
我正在尝试添加此功能: -当点击 Return 按钮时,它会弹出一个退出提示 (AlertDialog with yes or no) 问题 但是它不能正常工作。如果我点击按钮,它会直接退出程序。 这
我想按照下面的方式进行编码.. boolean doubleBackToExitPressedOnce = false; @Override public void onBackPressed() {
我正在制作一个电视 channel 流媒体应用程序,当从 ListView 中点击一个 channel 时,它会转到另一个 Activity ,然后会弹出播放器选择窗口,并在选择播放器后播放视频。现在
我有 3 个 Activity 第一个是登录第二是注册第三个主页 Activity (Bottom_nav) 带有底部导航,有 3 个 fragment A、B、C。 登录 Activity 是启动器
这是我的应用程序的结构: Activity A 是一个 ListViewActivity,带有启动 B Activity 的按钮。 在完成表单后的 B Activity 中,有一个按钮可以启动 C A
我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始游戏,开始一个新的 Activity 。但其他按钮,如“法律内容”或“教程”,仅通过 setContentView 显示新的 XML 布局。
我有一个包含 WebView 的 Activity ,我在打开时传递了 URL,像这样: Intent activity = new Intent(getApplicationContext(),Ne
如果我在 Android 1.5 上使用 onBackPressed(),我的应用程序会崩溃。如果在 Android 1.5 设备上运行,是否有可能停用此功能? 那里的代码不是绝对必要的,而是真正的“
基本上我的应用程序有一个登录屏幕,登录后您可以进行许多 Activity 。当我按下主页按钮时,应用程序进入后台,如果用户在一定时间内没有打开它,用户 session 将关闭,您将返回到登录屏幕。现在
我正在尝试通过单击后退按钮关闭我的应用程序。在主屏幕上,后退按钮会将您带到制作人员屏幕。在该积分屏幕上,我想使用后退按钮关闭该应用程序。不幸的是,我正在调用的 onBackPressed() 方法似乎
我有 3 个自定义对话框 (DialogFragment)。所有这些都是不可取消的,因为有必要,用户不能关闭它们。第一个对话开始第二个,第二个开始第三个。现在我想回到上一个对话框,如果我正在使用 ba
实际上我的问题是,当我按下后退按钮时,它会显示一个对话框,同时应用程序完成时没有对键进行任何操作?谁能解决这个问题? @Override public void onBackPressed() {
我是一名优秀的程序员,十分优秀!