Android 片段 addToBackStack 无法与导航抽屉一起使用
Android fragment addToBackStack not working with Navigation drawer
我创建了一个主页 activity,其中包含带有片段的导航抽屉 onclick。我已将 fragmentTransaction.addToBackStack(null).commit();
包含在片段事务代码中。但它不会返回上一页,而是关闭应用程序。
在我的 MainActivity
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// Handle navigation view item clicks here.
int id = item.getItemId();
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainlayout);
if (id == R.id.nav_project) {
ProjectFragment fragment = new ProjectFragment();
mainLayout.removeAllViews();
fragmentTransaction.replace(R.id.mainlayout, fragment);
fragmentTransaction.addToBackStack(null).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
我的默认值Fragment
public class ProjectFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_project, container, false);
return v;
}
}
谁能帮我解决这个问题。
感谢您的回复,很有帮助。基本上你需要添加一个片段到堆栈.
不使用replace
(),而是使用fragmentTransaction
的add
方法。这会给你想要的效果。
简单示例:fragmentTransaction.add(R.id.mainlayout, fragment);
我创建了一个主页 activity,其中包含带有片段的导航抽屉 onclick。我已将 fragmentTransaction.addToBackStack(null).commit();
包含在片段事务代码中。但它不会返回上一页,而是关闭应用程序。
在我的 MainActivity
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// Handle navigation view item clicks here.
int id = item.getItemId();
RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainlayout);
if (id == R.id.nav_project) {
ProjectFragment fragment = new ProjectFragment();
mainLayout.removeAllViews();
fragmentTransaction.replace(R.id.mainlayout, fragment);
fragmentTransaction.addToBackStack(null).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
我的默认值Fragment
public class ProjectFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_project, container, false);
return v;
}
}
谁能帮我解决这个问题。
感谢您的回复,很有帮助。基本上你需要添加一个片段到堆栈.
不使用replace
(),而是使用fragmentTransaction
的add
方法。这会给你想要的效果。
简单示例:fragmentTransaction.add(R.id.mainlayout, fragment);