2016-12-22 49 views
0

嗨是我的代碼防止同一片段中多次返回堆棧這裏

 
navigationView.setNavigationItemSelectedListener(new NavigationView 
       .OnNavigationItemSelectedListener() { 
      @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       if (item.isChecked()) { 
        //item already selected. Do nothing 
        drawerLayout.closeDrawer(GravityCompat.START); 
        return true; 
       } 
       switch (item.getItemId()) { 
        case R.id.home: 
         FragmentTransaction transaction = getSupportFragmentManager() 
           .beginTransaction(); 
         transaction.replace(R.id.fragment, new HomeFragment()) 
           .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        case R.id.other: 
         transaction = getSupportFragmentManager().beginTransaction(); 
         transaction.replace(R.id.fragment, new OtherFragment()) 
           .addToBackStack(null).setTransition(FragmentTransaction 
           .TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        default: 
         break; 
       } 
       drawerLayout.closeDrawer(GravityCompat.START); 
       return true; 
      } 
     }); 

我基本上只有2個片段,並僅僅是HomeFragment應該被添加到堆棧中。在HomeFragment和OtherFragment之間切換一段時間並在HomeFragment上單擊後退按鈕後,我最終將顯示HomeFragment多次顯示。 在HomeFragment內部是一個回收站。當我上下滾動時,我可以真正看到行被多次顯示。 如何確保HomeFragment只添加到後臺堆棧一次。

感謝

回答

0

當你點擊主菜單項試圖找出是否有返回堆棧或沒有任何片段。如果是,請調用popBackStack()或者像現在這樣替換一個片段。使用此代碼:

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); }

+0

謝謝@janzoner的偉大答案。它充當魅力。我的recyclerView並不總是顯示數據。有些它有時只是空的。奇怪的 – DeKekem

+0

不客氣。我希望你會用你的RecyclerView解決這個問題。如果不是,請嘗試再次在StackOverflow上尋求幫助。 – janzoner

0

你可以很容易地

YourFragment.isAdded 

檢查您的片段,如果你有多個片段,你可以創建一個新的類來管理所有的片段,並創建狀態檢查片段已添加或未添加。