簡體   English   中英

在 backpress 上的兩個片段之間導航

[英]Navigating between two fragments on backpress

我無法從當前片段返回到后壓上的前一個片段。 我有兩個片段,單擊時導航到第二個片段,當我嘗試從第二個片段返回時,我想返回到前一個片段,但應用程序在背壓時退出。 下面是我正在使用的代碼..

Fragment1 調用第二個片段

    UserFragment frag = new UserFragment()
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        frag.setArguments(bundle);
        transaction.addToBackStack("UserActivity");
             transaction.replace(android.R.id.content, frag, "UserActivity").addToBackStack(null);
transaction.commit();

在第二個片段中,我實現了一個 OnBackpress 接口並覆蓋了下面的方法

@Override
public void onBackPressed() {

    if (getFragmentManager().getBackStackEntryCount() != 0) {
        if(getFragmentManager().findFragmentByTag("UserActivity") != null){
            Log.e("UserActivity",getFragmentManager().findFragmentByTag("UserActivity").toString());
            getFragmentManager().popBackStack();
        };
    }

}

但是在后面按應用程序退出。 相反,我想回到上一個片段。 我在做什么錯誤? 請幫忙。 謝謝

您需要將第一個片段正確添加到后堆棧,您在代碼的第一部分做錯了。 請改用以下代碼。

    UserFragment frag = new UserFragment()
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    frag.setArguments(bundle);
    transaction.addToBackStack("UserActivity");
    transaction.replace(android.R.id.content, frag, "UserActivity");
    transaction.commit();

在上述更改后,也無需在您的 onBackPressed 中添加任何代碼。

首先,您需要將 Fragment 添加到 backstack:

public static void addFragment(FragmentManager fragmentManager, Fragment fragment, int id){
    fragmentManager.beginTransaction().add(id, fragment).addToBackStack(null).commit();
}

然后你需要覆蓋onBackPressed ,這是一個每當用戶單擊后退按鈕時調用的方法:

@Override  
public void onBackPressed() { 
    super.onBackPressed();
    if(getSupportFragmentManager().getBackStackEntryCount() == 0){
        button.setVisibility(View.VISIBLE);
    }
}

請在您的代碼中更改為 add() 而不是 replace() ..

    UserFragment frag = new UserFragment()
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    frag.setArguments(bundle);
    transaction.addToBackStack("UserActivity");
    transaction.add(android.R.id.content, frag, "UserActivity").addToBackStack(null);
    transaction.commit();

這將解決您的問題。

暫無
暫無

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

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