FragmentManager.findFragmentByTag == null ?

来源:6-1 Activity 的启动流程是怎样的?

AndroidHunter

2019-12-13

public class MainActivity extends FragmentActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    Button btn = findViewById(R.id.button1);
    btn.setOnClickListener(v -> {
        with();
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        with();
    });
}

public void with() {
    FragmentManager fm = this.getSupportFragmentManager();
    Fragment fragment = fm.findFragmentByTag("abc");
    if (fragment == null) {
        Log.i("hunter", "这一行执行了两次");
        fragment = new Fragment();
        fm.beginTransaction().add(fragment, "abc").commitAllowingStateLoss();
    }
}

}

老师,上面的代码new Fragment()怎么执行了两次,第一次添加Fragment的时候设置了tag呀

写回答

1回答

bennyhuo

2019-12-13

因为fragment添加不是同步的,第一个with调用完以后你阻塞了主线程,所以fragment根本没有办法真正添加。

2
9
bennyhuo
回复
AndroidHunter
客气啦,加油,可以的,一点就通~
2019-12-14
共9条回复

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程