简体   繁体   English

将活动扩展到AppCompatActivity

[英]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.

相关问题 如何为扩展 ArrayAdapter 的活动扩展 AppCompatActivity <hashmap<string, string> &gt;? </hashmap<string,> - How to extend AppCompatActivity for an activity which extends ArrayAdapter<HashMap<String, String>>? class AppCompatActivity 是 Activity 的子类? - The class AppCompatActivity is a subclass of Activity? 如何将扩展从AppCompatActivity更改为Fragment? - how to change the extend from AppCompatActivity to Fragment? 如何模拟 AppCompatActivity 和 ListActivity 扩展行为 - how to simulate AppCompatActivity and ListActivity extend behaviors 如何将片段和 AppCompatActivity 扩展到同一个类? - How to extend both fragment and AppCompatActivity to a same class? 我在Android Studio中扩展AppCompatActivity时出错 - Error when i extend AppCompatActivity in Android studio 无法从AppCompatActivity访问Activity方法 - Can't access Activity methods from AppCompatActivity 从扩展 Fragment 的类启动 AppCompatActivity Activity - Starting an AppCompatActivity Activity from a class that extends Fragment 使用BaseActivity摆脱Activity和AppCompatActivity的委托方法 - Get rid of delegate method for both Activity and AppCompatActivity by using BaseActivity ViewModelProvider() 创建一个错误,虽然自己的活动正在扩展 AppCompatActivity - ViewModelProvider() creates an error, although own activity is extending AppCompatActivity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM