Chỉ một vài ngày trước, tôi bắt đầu tìm hiểu về các phân đoạn trong Android. Và tôi cũng phải đối mặt với vấn đề này. Ở đây tôi thể hiện giải pháp của mình và cách tôi giải quyết vấn đề này. Vui lòng sửa lỗi nếu mã của tôi không đúng. Những gì chúng ta có vào lúc này? Năng suất, nhiều mảnh vỡ và hậu trường của chúng. Chúng tôi muốn mở tất cả các mảnh từ trình đơn ngăn kéo và xóa tất cả các mảnh khác từ backstack. Nhưng, chúng ta phải chỉ giữ một mảnh Home. Khi chúng ta ở lại trên mảnh Home và người dùng nhấn nút Back ứng dụng là goeing đóng cửa.
Hoạt động.lớp
protected void onCreate(Bundle savedInstanceState)
{
...
// adding Home fragment without adding transaction into backstack
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, HomeFragment.newInstance("args"), null);
ft.commit();
}
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
finish();
}
}
public void addFragmentFromMenu(Fragment fragment){
String backStateName = fragment.getClass().getName();
clearBackStack();
FragmentManager manager = getSupportFragmentManager();
if(manager.getBackStackEntryCount()> 0)
{
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(backStateName) == null) {
//fragment not in back stack, create it.
addFragment(fragment, manager, backStateName);
}
}
else // no fragments
{
addFragment(fragment, manager, backStateName);
}
}
public void addFragment(Fragment fragment, FragmentManager manager, String backStateName)
{
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, fragment, backStateName);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}
public void clearBackStack() {
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Và trên nhấp chuột vào ngăn kéo mục trình đơn
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_camera) {
addFragmentFromMenu(CameraFragment.newInstance("cam1", "cam2"));
} else if (id == R.id.nav_gallery) {
addFragmentFromMenu(TestFragment.newInstance("test1","test2"));
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Tôi xóa toàn bộ backstack, sau đó thêm lại fragA và fragD. cảm ơn – user782104