【发布时间】:2016-05-01 01:47:22
【问题描述】:
我目前有不同的片段可以打开相同的活动。有没有办法实现向上导航按钮,当按下时,它会返回到来自的片段而不是总是作为起始片段?
我附上了一张图片来更好地说明这一点。
后按按钮工作正常,只是不确定向上导航按钮。
谢谢。
【问题讨论】:
标签: android fragment fragmentpageradapter up-navigation
我目前有不同的片段可以打开相同的活动。有没有办法实现向上导航按钮,当按下时,它会返回到来自的片段而不是总是作为起始片段?
我附上了一张图片来更好地说明这一点。
后按按钮工作正常,只是不确定向上导航按钮。
谢谢。
【问题讨论】:
标签: android fragment fragmentpageradapter up-navigation
在你的片段中...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if ( getActivity() != null ) {
getActivity.onBackPressed();
}
break;
}
return true;
}
在您的活动中...
@Override
public void onBackPressed() {
if ( viewPager != null && viewPager.getCurrentItem() != 0 ) {
viewPager.setCurrentItem(0);
}
}
【讨论】:
我的解决方案可能并不优雅,但在某种程度上是有效的。
首先,您应该将启动新活动的片段的标签放入意图中。启动 Activity 后,您在 MainActivity 中调用 finish();。
在新活动中,您覆盖onOptionsItemSelected 方法,因此它会创建一个新意图并启动 MainActivity。当然,你会在意图中再次存储片段的标签。
// Handles back button in ActionBar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("lastFragment",value);
startActivity(intent);
finish();
break;
}
return true;
}
最后 MainActivity 应该检查 Intent 是否为空。如果没有,获取fragment的tag并加载。
Intent intent = getIntent();
if(savedInstanceState!=null) {
lastFrag = savedInstanceState.getString("lastFragment");
}
//Recreate the fragment
最终的结果是用户将被提示回到调用新活动的片段。虽然我确信有更好的方法来做到这一点。
【讨论】: