在Fragment的生命周期中,onAttach()方法在onCreate()方法之前调用.我无法绕过这个.你为什么要先附上片段?
我对Fragment.isVisible()应该如何工作感到困惑.即使我添加了一个片段Activity.create(),Fragment.isVisible()即使FragmentManager.commitNow()使用它也会返回false .
Fragment.isVisible()即使在中也返回false onResume().但是,单击UI按钮时,返回的值是正确的.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public final static String TAG = "HideFragmentOnChange";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((Button)findViewById(R.id.my_button)).setOnClickListener(this);
if(savedInstanceState == null){
Fragment fragmentA = new FragmentA();
Log.d(TAG, "onCreate: Before FragmentTransaction FragA: " + (fragmentA.isVisible() ? "visible" : "not visible"));
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragmentA, "fragA")
.commitNow();
Log.d(TAG, "onCreate: After FragmentTransaction FragA: " + (fragmentA.isVisible() ? "visible" : "not visible"));
}
this.runOnUiThread(new Runnable(){
@Override
public …Run Code Online (Sandbox Code Playgroud) 查看 Fragment 生命周期(例如此处),Activity 似乎在发出任何其他回调之前附加到 Fragment(这是由onAttach()方法通知的)。
在我的由单个活动组成的应用程序中,第一个 Fragment 是从onCreate()Activity的方法中打开的(实际上它是在里面完成的最后一件事onCreate())。
目前,我正在onCreateView()回调中初始化我的所有图形元素,包括一些ArrayAdapter需要构造 Activity 的对象(如)的实例化,这是通过调用getActivity(). 我假设此时 Activity 肯定存在,因为该onAttach()方法已经被调用。
我注意到 IntelliJ 警告我getActivity()返回的可能性null,可能只是因为该方法被注释为@Nullable,所以我开始在网上搜索我的假设是否真的正确,现在我很困惑:getActivity()在内部调用是否真的安全onCreateView()? 为什么有一个方法被调用onActivityCreated()(我知道它现在已被弃用,但它肯定是有用途的)?
不幸的是,文档无助于理解这一点。