簡體   English   中英

如何在不同的片段中添加后按按鈕?

[英]How to add back pressed button in diffeent fragment?

我使用帶有 3 個主要 Fragment 的 BottomNavigationView,例如Fragment [A], [B], [C] 並且Fragment [A]是默認 Fragment,如果Fragment [B][C]back button必須返回Fragment A fragment [B]中,我添加按鈕以獲取另一個片段,只需將其稱為Fragment [D] ,但如果在片段 D 中我按下后退按鈕應用程序返回fragment [A]

那么當fragment [D]按下返回按鈕時如何返回Fragment [B]

您可以使用片段堆棧。 在活動中實現 onBackPressed()。

@Override
public void onBackPressed() {
    //Work with fragments stack...

    int count = getSupportFragmentManager().getBackStackEntryCount();    
    if (count == 0) {
        super.onBackPressed();
    } else {
        getSupportFragmentManager().popBackStack();
    }

}

Fragment 中沒有 onBackPressed function。
這就是為什么你應該為 backPressed 事件定義回調接口。

    public interface IFragment {
        boolean onBackPressed();
    }

然后,您應該實現您的片段 [A]、[B]、[C]、[D]。

    @Override
    public boolean onBackPressed() {
        return true;
    }

你應該在 Fragments 的宿主活動中處理它。

    @Override
    public void onBackPressed() {
        List<Fragment> fragments = getSupportFragmentManager().getFragments();

        boolean handled = false;
        for(Fragment f : fragments) {
            if(f instanceof IFragment) {
                handled = ((IFragment) f).onBackPressed();
                if(handled) {
                    FragmentManager fm = getSupportFragmentManager();
                    for(String name : fragmentNames) {
                        fm.popBackStack(name, 0);
                    }
                    fm.beginTransaction().commit();
                }
            }
        }

        super.onBackPressed();
    }

我剛剛實現了代碼,讓你知道你必須知道什么。
祝你好運。

暫無
暫無

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

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