Google 在 Android 上弃用 fragment 的 onActivityCreated() 并推荐使用 LifeCycleObserver:
To get a callback specifically when a Fragment activity's
* {@link Activity#onCreate(Bundle)} is called, register a
* {@link androidx.lifecycle.LifecycleObserver} on the Activity's
* {@link Lifecycle} in {@link #onAttach(Context)}, removing it when it receives the
* {@link Lifecycle.State#CREATED} callback.
Run Code Online (Sandbox Code Playgroud)
所以我尝试以推荐的方式制作它,但我只能在 Logcat 中观察到的状态只是State: INITIALIZED。
private lateinit var lifecycleObserver: LifecycleObserver
override fun onAttach(context: Context) {
super.onAttach(context)
hostActivity = context as HostActivity
lifecycleObserver = object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
Logger.tag("SOME-TAG")d("State: …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-activity
我想在Android片段中使用XML定义自定义属性(不使用捆绑其他参数),就像declare-styleable在自定义控件中一样.但是没有带有AttrSet参数的构造函数,所以它可能吗?我可以覆盖public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState)以获得属性支持吗?
我想将我的活动中的参数传递给嵌入到活动中的片段.片段静态嵌入xml布局中.我试着像这样调用setArgument():
setContentView(R.layout.detail_activity);
DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment);
detailFragment.setArguments(getIntent().getExtras());
Run Code Online (Sandbox Code Playgroud)
但是已经太晚了,因为必须在片段创建后立即调用setArguments.唯一的是我看到getArguments()和更改捆绑.有更好的方法吗?
我有一个片段在onCreateView中使用getArguments()方法来获取一些输入数据.
我在ViewPager中使用这个片段,它工作正常.
当我尝试在不同的活动中重用此片段时,问题就开始了,该活动仅显示此片段.我想将片段添加到activitie的布局中:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
android:name="com.example.ScheduleDayFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
问题是:如何将Bundle传递给布局中声明的片段?
我正在实现一个Android片段.我知道框架可以自动销毁并重新创建片段,并且重新创建片段会调用其默认构造函数,而不是具有参数的构造函数.有很多帖子(例如这个问题的接受答案)显示了如何通过实现静态newInstance方法为片段提供参数.
我不明白的是谁打电话newInstance.我的第一印象是 - 因为可以为这个newInstance方法定义任意参数- 我应该在应用程序的某个地方添加一个显式调用,并且名称newInstance只是一个命名约定.但是,除了框架调用默认构造函数创建的第二个片段之外,我将创建第二个片段,这让我很困惑.
那么上面的假设是不正确的,并且该newInstance方法实际上是Java用于实例化类的内置方法的重载?在那种情况下,我看不出如何定义一个newinstance采用任意参数列表的方法.或者这可能在Java中,我只是不太了解Java?