gpt4 book ai didi

Android:在 X 秒后移动到不同的 fragment ?

转载 作者:行者123 更新时间:2023-11-30 01:23:57 28 4
gpt4 key购买 nike

我有一部分用户体验流程,我想在 fragment A 的 TextView 中为用户显示一条消息 2 秒,然后用 fragment B 替换 fragment A。我通过在内部执行以下操作来完成此操作 fragment A.

someTextView.setText("some message");

Handler mainLooperHandler = new Handler(Looper.getMainLooper());

mainLooperHandler.postDelayed(new Runnable() {
@Override
public void run() {
((MyActivity) getActivity()).gotoTheNextFragment();
}
}, 2000);

在我的 Activity 中相关的方法:

public void gotoTheNextFragment() {
Fragment mFragmentB = new FragmentB();

getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, mFragmentB, "FRAGMENTB")
.commit();
}

然而,这会导致一些问题。首先,如果用户在 postdelayed 正在执行时按下“后退”,那么用户会在 getActivity 上得到一个空指针异常。其次,用户在尝试执行传输时有时会收到错误消息“在 onSaveInstanceState 之后无法执行此操作”。

我知道,如果我将“提交”更改为“commitAllowingStateLoss”,那么我将避免第二个错误,但这可能不是最佳做法,而且我知道根本不建议在异步任务内的 fragment 之间移动.完成此过程的更好方法是什么(显示消息,等待两秒钟,然后以不会导致崩溃的安全方式替换 fragment )?

最佳答案

无需在 Activity 中定义方法 gotoTheNextFragment。你可以在它自己的 fragment 中定义。

someTextView.setText("some message");

Handler mainLooperHandler = new Handler(Looper.getMainLooper());

mainLooperHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(getActivity!=null){

Fragment mFragmentB = new FragmentB();

getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, mFragmentB, "FRAGMENTB")
.commit();
}
}
}, 2000);

关于Android:在 X 秒后移动到不同的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702126/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com