[英]Extend Activity to AppCompatActivity
Sorry if my question is dublicated, but I can't (or dont know how to google) find answer. 抱歉,如果我的问题被复制,但我无法(或不知道如何使用Google)找到答案。 I want to use
rxlifecycle-navi
library in order to bind rxjava to lifecycle, so I need to extends NaviActivity
class. 我想使用
rxlifecycle-navi
库来将rxjava绑定到生命周期,所以我需要扩展NaviActivity
类。 The problem is that NaviActivity
class extends Activity
and I need to extends AppCompatActivity
for toolbar
. 问题是
NaviActivity
类扩展了Activity
而我需要扩展toolbar
AppCompatActivity
。 How can I achieve this elegant without trying to change source code of library? 如何在不尝试更改库源代码的情况下实现这种优雅? I found article how to do it via
AppCompatDelegate
, but is doesnt look flexible enought. 我发现文章如何通过
AppCompatDelegate
做到这一点,但看起来不够灵活。 I suppose it is general problem, that I cant extends 2 classes. 我认为这是一个普遍的问题,我不能扩展2个课程。
My BaseActivity
at the moment: 我目前的
BaseActivity
:
public abstract class BaseActivity extends NaviActivity implements AppCompatCallback {
private final ActivityLifecycleProvider provider = NaviLifecycle.createActivityLifecycleProvider(this);
public AppCompatDelegate delegate;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
delegate = AppCompatDelegate.create(this, this);
delegate.onCreate(savedInstanceState);
}
@Override
public void onSupportActionModeStarted(ActionMode mode) {
}
@Override
public void onSupportActionModeFinished(ActionMode mode) {
}
@Nullable
@Override
public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
return null;
}}
And another class: 还有另一类:
public class CarWashesActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_car_washes);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
delegate.setSupportActionBar(toolbar);
delegate.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}}
Simple solution, create your own NaviAppCompatActivity
in com.trello.navi.component
package. 简单的解决方案,在
com.trello.navi.component
包中创建自己的NaviAppCompatActivity
。
package com.trello.navi.component;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import com.trello.navi.Event;
import com.trello.navi.Listener;
import com.trello.navi.NaviComponent;
import com.trello.navi.internal.NaviEmitter;
public class NaviAppCompatActivity extends AppCompatActivity implements NaviComponent {
private final NaviEmitter base = NaviEmitter.createActivityEmitter();
@Override public boolean handlesEvents(Event... events) {
return base.handlesEvents(events);
}
@Override public <T> void addListener(Event<T> event, Listener<T> listener) {
base.addListener(event, listener);
}
@Override public <T> void removeListener(Listener<T> listener) {
base.removeListener(listener);
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
base.onCreate(savedInstanceState);
}
@Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
base.onCreate(savedInstanceState, persistentState);
}
@Override protected void onStart() {
super.onStart();
base.onStart();
}
@Override protected void onResume() {
super.onResume();
base.onResume();
}
@Override protected void onPause() {
base.onPause();
super.onPause();
}
@Override protected void onStop() {
base.onStop();
super.onStop();
}
@Override protected void onDestroy() {
base.onDestroy();
super.onDestroy();
}
@Override protected void onRestart() {
super.onRestart();
base.onRestart();
}
@Override protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
base.onSaveInstanceState(outState);
}
@Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
base.onSaveInstanceState(outState, outPersistentState);
}
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
base.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
base.onRestoreInstanceState(savedInstanceState, persistentState);
}
@Override protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
base.onNewIntent(intent);
}
@Override public void onBackPressed() {
super.onBackPressed();
base.onBackPressed();
}
@Override public void onAttachedToWindow() {
super.onAttachedToWindow();
base.onAttachedToWindow();
}
@Override public void onDetachedFromWindow() {
super.onDetachedFromWindow();
base.onDetachedFromWindow();
}
@Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
base.onConfigurationChanged(newConfig);
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
base.onActivityResult(requestCode, resultCode, data);
}
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
base.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Reference: 参考:
search for "NaviAppCompatActivity" on https://github.com/trello/navi 在https://github.com/trello/navi上搜索“ NaviAppCompatActivity”
Create a AppCompatNaviActivity
extending AppCompatActivity
. 创建
AppCompatNaviActivity
延伸AppCompatActivity
。 Then add all code provided in NaviActivity
into AppCompatNaviActivity
. 然后将
NaviActivity
提供的所有代码添加到AppCompatNaviActivity
。
Now whenever you need to extend NaviActivity
, extend AppCompatNaviActivity
which will provide all awesome features of AppCompatActivity
and also of NaviActivity
. 现在,每当需要扩展
NaviActivity
,都可以扩展AppCompatNaviActivity
,它将提供AppCompatActivity
以及NaviActivity
所有NaviActivity
。
Its a little hack but hope this will help you out. 这是一个小技巧,但希望能对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.