簡體   English   中英

按下返回按鈕時如何獲取最后使用的片段

[英]How to get last Fragment used when pressing back button

我有一個簡單的代碼片段:

private BottomNavigationView.OnNavigationItemSelectedListener navListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                    Fragment selectedFragment= null;

                    switch (menuItem.getItemId()){
                        case R.id.nav_home:
                            selectedFragment= new HomeFragment();
                            setTitle("Beranda");
                            break;
                        case R.id.nav_message:
                            selectedFragment= new MessageFragment();
                            setTitle("Pesan");
                            break;
                        case R.id.nav_transaction:
                            selectedFragment= new TransactionFragment();
                            setTitle("Transaksi");
                            break;
                        case R.id.nav_profile:
                            selectedFragment= new ProfileFragment();
                            setTitle("Profil");
                            if(sessionLevel.equals("admin")){
                                setTitle("Admin");
                            }
                            break;
                    }
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, selectedFragment).commit();
                    return true;
                }
            };

大部分片段只是意圖活動的某種持有者。 活動本身沒有花哨的代碼。

問題是當我在Profile菜單上執行Intent然后按回去時,顯示的片段是HomeActivity但是所選的按鈕是Profile 我不知道其他2個片段,因為我還沒有,但可能他們做的是相同的事情。

您可以按照以下步驟進行操作:

    @Override
        public void onBackPressed() {
            super.onBackPressed();

            Fragment frag = YourActivity.this.getSupportFragmentManager().findFragmentById(R.id.fragment_container);

           if(frag!=null && frag instanceof yourFragment)
           {}

   }

以下將給你數

int count = getSupportFragmentManager().getBackStackEntryCount();

您可以創建條件,如果count大於1,則有1個以上的片段,否則您至少有1個片段,這將是最后一個片段。 如果計數為0,則堆棧上不再有可用的片段,因為所有片段都已彈出堆棧。

  1. 創建一個接口:
public interface IOnBackPressed {
    boolean onBackPressed();
}
  1. 在Fragment中實現IOnBackPressed:
public class FAQFragment extends Fragment implements IOnBackPressed {
    public boolean onBackPressed() {
        return false
    }
}
  1. 在主要活動Backpress上使用
@Override
public void onBackPressed(){
     if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
          getSupportFragmentManager().popBackStack();
     } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM