2016-04-12 17 views
1

Sorgumun yayınlanmamış olmasından ötürü özür dilerim, ancak cevabı bulamıyorum (veya google'ı bilmiyorum). Rxjava'yı yaşam döngüsüne bağlamak için rxlifecycle-navi kitaplığını kullanmak istiyorum, bu yüzden NaviActivity sınıfını genişletmem gerekiyor. Sorun,sınıfının Activity uzunluğudur ve toolbar için AppCompatActivity genişletmem gerekiyor. Kütüphanenin kaynak kodunu değiştirmeden bu zarifliği nasıl başarabilirim? article'u AppCompatDelegate aracılığıyla nasıl buldum, ancak esnek bir şekilde görünmüyor. Sanırım genel sorun, 2 dersi uzatamıyorum. Şu andaEtkinliği AppCompatActivity'e genişletme

My 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; 
}} 

Ve başka sınıfı:

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); 
}} 

cevap

4

Basit bir çözüm, com.trello.navi.component ürün paketinde kendi NaviAppCompatActivity ürününüzü oluşturun.

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); 
    } 
} 

Referans: Bu iyi bir çözüm, thx, ama başka olup olmadığını merak https://github.com/trello/navi

+0

üzerine "NaviAppCompatActivity" için
arama. Bcs esnek değil 2, kütüphanenin kaynak kodu değişecek mi yoksa basitçe kaynak koduna bakamaz mıyım? –

+1

Umm ... bana 'trello/navi' kütüphanesinin [zaten NaviAppCompatActivity'i desteklediğini] gösteriyor (https://github.com/trello/navi/blob/master/navi/src/main/java/ kütüphanenin kendisinde com/trello/navi/component/support/NaviAppCompatActivity.java). Yaptığım kopyalamayı yapmak zorunda bile değilsin. – EpicPandaForce

2

bir AppCompatNaviActivityAppCompatActivity uzanan oluşturun. Daha sonra NaviActivity'da verilen tüm kodu AppCompatNaviActivity'a ekleyin.

Şimdi, NaviActivity uzatmak da NaviActivity ait AppCompatActivity tüm müthiş özellikleri sağlamak ve hangi AppCompatNaviActivity uzatmak gerektiğinde.

Onun küçük bir kesmek ama umarım bu size yardımcı olacaktır.