Fil*_*nco 65 android android-fragments
我有一个活动和许多碎片在同一个膨胀 FrameLayout
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
示例:mainActivity>任何片段(按后退按钮)>活动为空.
在onCreate:
layout = (FrameLayout)findViewById(R.id.content_frame);
layout.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
当我开始片段时:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, profileFragment);
ft.addToBackStack(null);
ft.commit();
layout.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
我想我需要GONE在后退时再次使frameLayout的可见性,但我该怎么做?
我尝试onBackPressed并设置layout.setVisibility(View.GONE);但我无法通过片段返回,因为我直接进入主页.
Sam*_*mar 121
如果您在活动中使用了多个片段,或者即使您只有一个片段,那么第一个片段也不应该定义addToBackStack.由于这允许返回导航,因此在此片段之前将显示空活动布局.
// fragmentTransaction.addToBackStack() // dont include this for your first fragment.
Run Code Online (Sandbox Code Playgroud)
但是对于另一个片段,你需要定义它,否则后面将不会导航到早期的屏幕(片段),而是应用程序可能会关闭.
Goo*_*ife 42
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
else {
int fragments = getSupportFragmentManager().getBackStackEntryCount();
if (fragments == 1) {
finish();
} else if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
}
Run Code Online (Sandbox Code Playgroud)
添加片段
getSupportFragmentManager().beginTransaction()
.replace(R.id.layout_main, dashboardFragment, getString(R.string.title_dashboard))
.addToBackStack(getString(R.string.title_dashboard))
.commit();
Run Code Online (Sandbox Code Playgroud)
小智 22
回复晚了非常抱歉.
你不必添加 ft.addToBackStack(null); 同时添加第一个片段.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, profileFragment);
// ft.addToBackStack(null); --remove this line.
ft.commit();
// ... rest of code
Run Code Online (Sandbox Code Playgroud)
小智 20
如果你想通过片段跟踪,你应该覆盖onBackPressed方法,就像这样
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 1) {
finish();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
JRo*_*ero 14
您可以覆盖onBackPressed并检查后台堆栈上是否有任何内容.
@Override
public void onBackPressed() {
int fragments = getFragmentManager().getBackStackEntryCount();
if (fragments == 1) {
// make layout invisible since last fragment will be removed
}
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)