微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

片段无法在“后退”按钮上打开上一个片段

如何解决片段无法在“后退”按钮上打开上一个片段

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

截至目前,当我从Fragment#1中打开MainActivity时,我将Fragment#1添加到BackStack中。打开Fragment#2后,当我按下“后退”按钮时,第一次单击不执行任何操作,然后第二次单击使我一直返回登录页面,跳过了Fragment #1MainActivity。 / p>

如何做到这一点,当我按下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();
        }
    }

解决方法

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);

您可以在相关部分中提供后退操作。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。