在实施架构组件时,我遇到了这个问题
import android.arch.lifecycle.Lifecycle
import android.arch.lifecycle.LifecycleOwner
import android.os.Bundle
import com.reversebits.trendyvidz.R
class MainActivity : LifecycleOwner {
override fun getLifecycle(): Lifecycle {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme) //This shows error
setContentView(R.layout.activity_main) //This shows error
init()
}
private fun init() {
when {
isNetworkAvailable() -> toast("Yes Avail")
else -> toast("No")
}
}
}
我如何在AppCompatActivity的setContentView()
中获取基于Activity的基于上下文的方法?
答案 0 :(得分:3)
正如已经指出的,如果你想创建一个Activity,你需要扩展Activity。
除此之外,您的代码中存在一些问题:
如果您使用支持库26.1.0+和生命周期1.0.0-alpha9-1已包含生命周期,因为
AppCompatActivity extends FragmentActivity
FragmentActivity extends SupportActivity
SupportActivity extends Activity implements LifecycleOwner
如果您使用较旧的支持库或生命周期,则有两种选择。
如果您的活动延长了FragmentActivity
,那么您可以扩展LifecycleActivity
,就是这样。
如果你不能这样做,你可以实施LifecycleRegistryOwner
,例如:
class MyActivity extends AppCompatActivity implements LifecycleRegistryOwner {
private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistryOwner getLifecycle() {
return mLifecycleRegistry;
}
}
这是示例代码结束的地方,但我没有看到任何代码实际调度事件。在调查当前SupportActivity
后,结果发现它正在使用ReportFragment
来发送所有事件。将其添加到正确的调度事件:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
}
@CallSuper
protected void onSaveInstanceState(Bundle outState) {
this.mLifecycleRegistry.markState(State.CREATED);
super.onSaveInstanceState(outState);
}
另一件事,这是一个错误:
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(savedInstanceState: Bundle?) {
方法onCreate
触发ON_CREATE
事件。不是相反。你会得到像这样的堆栈溢出错误。
您在方法上使用@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
注释,要在调用onCreate
后自动触发,而不是onCreate
方法本身。
答案 1 :(得分:-1)
好的,我明白了,
我只需要这样做:
class MainActivity : AppCompatActivity(), LifecycleOwner {
由于LifecycleOwner只是一个具有单一方法的界面
override fun getLifecycle(): Lifecycle {
TODO("Not implemented") //To change body of created functions use File | Settings | File Templates.
}
我可以在实现LifecycleOwner后使用此注释注释方法。
@OnLifecycleEvent(Lifecycle.Event.ON_START) etc.