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

标签 android android-fragments android-activity nullpointerexception fragmenttransaction

我有一部分用户体验流程,我想在 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/

相关文章:

android - 数据传递到 Android 中的另一个应用程序

android - 在 viewpager 中显示 Youtube 视频

java - fragment 提交时出现 IllegalStatementException

java - 如何在非父 Activity 中更改小部件

android - 应用程序退出而不是进入下一个 Activity

android - setUserVisibleHint 在 Fragment 中的 onCreateView 之前调用

android - 反方向射击? - AndEngine经典教程

android - Cloud Firestore API 是否使用某种网络安全协议(protocol)?

java - 检查网络和互联网连接 - Android

android - 缩放中央图像回收器 View