[英]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.