繁体   English   中英

片段未在后退按钮上打开上一个片段

[英]Fragment not Opening Previous Fragment on Back Button

我一直在努力实现一个超级简单的应用程序布局,其中我的MainActivity在其onCreate方法中打开Fragment#1 ,然后在单击项目时Fragment#1打开Fragment#2

现在,当我从MainActivity打开Fragment#1 ,我将Fragment#1添加到 BackStack。 打开Fragment#2 ,当我点击后退按钮时,第一次点击什么都不做,然后第二次点击将我一直送回到我的登录页面,跳过Fragment #1MainActivity

当我点击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();
        }
    }

在创建时

科特林

   val backpress = requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, true) {
                        // Handle the back button event

}

爪哇

    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            // Handle the back button event
        }
    });
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

您可以在相关部分提供您的后台操作。

getSupportFragmentManager().beginTransaction().replace(R.id.frag_frame, fragment).addToBackStack("text").commit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM