BeF*_*ree 5 android android-layout android-fragments navigation-drawer
我正在构建一个非常简单的应用程序.它的核心是2个屏幕:
1)列表屏幕:项目列表
2)细节屏幕:项目的详细视图
我使用一个Activity(扩展AppCompatActivity)与Action-Bar,Navigation-Drawer和主内容部分(FrameLayout).
我在2个屏幕上使用了2个不同的片段:
打开应用程序时,我将列表片段扩展到主要内容部分.
当单击列表中的项目时,我将详细信息片段膨胀到主要内容部分,这一切都运行良好.
在详情屏幕上,我希望Action-Bar显示一个返回列表屏幕的按钮.
考虑到我使用片段而不是单独的活动这一事实,我该如何实现?
您可以在每次加载详细信息片段时启用向上按钮,并在任何其他片段加载时禁用它.
首先在Activity中定义这些方法,您可以从Fragments调用这些方法以显示/隐藏向上按钮:
public void showUpButton() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public void hideUpButton() {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
Run Code Online (Sandbox Code Playgroud)
您可能只想在详细信息碎片的Resume()中启用向上按钮(MainActivity只是一个示例,更改为您的Activity的名称).....
@Override
public void onResume() {
super.onResume();
MainActivity activity = (MainActivity)getActivity();
if (activity != null) {
activity.showUpButton();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在其他片段中:
@Override
public void onResume() {
super.onResume();
MainActivity activity = (MainActivity)getActivity();
if (activity != null) {
activity.hideUpButton();
}
}
Run Code Online (Sandbox Code Playgroud)
接下来就是让按钮实际返回.首先确保将带有向上按钮的Fragment添加到后端堆栈,然后将其添加到该Fragment.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
((MainActivity)getActivity()).onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Activity中,如果FragmentManager有任何条目,则覆盖onBackPressed()并从后向堆栈弹出:
@Override
public void onBackPressed() {
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager.getBackStackEntryCount() > 1) {
fragmentManager.popBackStackImmediate();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)