片段未在后退按钮上打开上一个片段
Posted
技术标签:
【中文标题】片段未在后退按钮上打开上一个片段【英文标题】:Fragment not Opening Previous Fragment on Back Button 【发布时间】:2021-01-17 07:24:15 【问题描述】:我一直在努力实现一个超级简单的应用程序布局,我的MainActivity
在其onCreate
方法中打开Fragment#1
,然后Fragment#1
在单击项目时打开Fragment#2
。
目前,当我从我的MainActivity
打开Fragment#1
时,我会将Fragment#1
添加到BackStack。打开Fragment#2
后,当我点击返回按钮时,第一次单击什么也不做,然后第二次单击将我一路返回到我的登录页面,跳过Fragment #1
和MainActivity
。
我怎样才能做到这一点,当我点击Fragment#2
上的返回按钮时,它会打开Fragment#1
备份?
(MainActivity
打开Fragment#1
)
public class MainActivity extends AppCompatActivity
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
SearchListFragment fragment = new SearchListFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_fragment_container, fragment);
transaction.addToBackStack(TAG);
transaction.commit();
(Fragment#1
打开Fragment#2
)
public class SearchListFragment extends Fragment
public void viewResults(SearchModel search)
Bundle args = new Bundle();
args.putString("ID", search.getId());
ResultsFragment fragment = new ResultsFragment();
fragment.setArguments(args);
FragmentTransaction transaction = getParentFragmentManager().beginTransaction();
transaction.replace(R.id.main_fragment_container, fragment);
transaction.commit();
编辑
我应该提到我已经尝试自己处理后按事件。我尝试将此添加到我的MainActivity
,但它并没有改变行为:
@Override
public void onBackPressed()
if (getSupportFragmentManager().getBackStackEntryCount() == 0)
this.finish();
else
getSupportFragmentManager().popBackStack();
【问题讨论】:
【参考方案1】:onCreate with
科特林
val backpress = requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, true)
// Handle the back button event
Java
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */)
@Override
public void handleOnBackPressed()
// Handle the back button event
);
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
您可以在相关部分提供您的后台操作。
【讨论】:
你建议我把处理程序放在什么地方?FragmentManager.popBackStack()
之类的东西?【参考方案2】:
getSupportFragmentManager().beginTransaction().replace(R.id.frag_frame, fragment).addToBackStack("text").commit();
【讨论】:
你能澄清一下吗?这是我在创建Fragment#1
时在 onCreate
中实现的几乎完全相同的代码
在 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它如何解决问题。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。以上是关于片段未在后退按钮上打开上一个片段的主要内容,如果未能解决你的问题,请参考以下文章
后退按钮关闭应用程序而不是转到上一个片段 android 导航组件