https://github.com/xxv/android-lifecycle显示在onStart活动之前调用片段onAttach、onCreateView和onActivityCreated。但是,我尝试记录这个:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.e("TRACE", "MainActivity onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment firstFragment = FirstFragment.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.content, firstFragment).commit();
}
@Override
public void onStart() {
Log.e("TRACE", "MainActivity onStart");
super.onStart();
}
FirstFragment如下所示:
public class FirstFragment extends Fragment {
public FirstFragment() {
// Required empty public constructor
}
public static FirstFragment newInstance() {
FirstFragment fragment = new FirstFragment();
return fragment;
}
@Override
public void onAttach(Context context) {
Log.d("TRACE", "FirstFragment onAttach");
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("TRACE", "FirstFragment onCreate");
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("TRACE", "FirstFragment onCreateView");
return inflater.inflate(R.layout.fragment_first, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.d("TRACE", "FirstFragment onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
它印了这个:
这取决于片段如何添加到
活动中。
向活动添加片段有两种常见方法:通过
如果不是提供
R.id.content
视图并使用FragmentTransaction
,而是通过使用如下活动布局来创建您的FirstFrament
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.stackoverflow.FirstFragment"/>
</LinearLayout>
您将在日志中看到这一点:
E/TRACE ( 6094): MainActivity onCreate
D/TRACE ( 6094): FirstFragment onAttach
D/TRACE ( 6094): FirstFragment onCreate
D/TRACE ( 6094): FirstFragment onCreateView
E/TRACE ( 6094): MainActivity onStart
D/TRACE ( 6094): FirstFragment onActivityCreated
E/TRACE ( 6094): MainActivity onResume
至于为什么您在使用
FragmentTransaction
时看到消息的顺序,这归结为事务是异步的事实;不能保证它会在您调用提交()。在您的案例中,系统实际上直到您的活动的
onStart()
之后才开始执行它。
从v4.fragment请求运行时权限并让回调转到fragment?
我正在使用查看寻呼机。我已经为我的活动和我的视图页中的片段创建了一个共享视图模型。问题是当我在视图模型中设置MutableLiveData值时,不会调用活动中的观察者。 我使用以下行初始化我的视图模型
问题内容: 在Java 7的try-with-resources中,我不知道finally块和自动关闭发生的顺序。什么顺序 问题答案: 资源在捕获或最终阻塞之前被关闭。请参阅本教程。 try-with-resources语句可以具有catch并最终阻塞,就像普通的try语句一样。在try-with- resources语句中,在声明的资源已关闭之后,将运行任何catch或finally块。 要评估
我有一个包含片段的活动。我请求该活动给予以下联系许可: 从片段中,我请求如下摄像头许可:
我有一个由一个活动和几个片段组成的应用程序,由谷歌重新指挥。其他细节在这里。我想保持一个菜单静止和切换我的碎片在容器在中心。 当我启动该活动时,它会初始化一个变量,如代码所示。 但是,当我在fragment onCreate中使用这个变量()时,活动中的绑定行会因,如下面的logcat所示 下面是完整的logcat,我们可以看到第二个sout丢失了,但在这一点上没有抛出错误。