16

我有這樣的擴展AppCompactActivity的活動視圖setSupportActionBar,並在onCreate方法我設置好的以通常的方式Toolbar使用setSupportActionBar方法:如何在擴展LifecycleActivity

public class StepMasterActivity extends AppCompatActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_step_master); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar);` 
    } 
} 

但現在我有一個ViewModel組件並在作爲此活動的子代的片段之間共享數據並管理生命週期我必須在Activity中獲取此組件,因此我將此擴展爲LifecycleActivity。

public class StepMasterActivity extends LifecycleActivity { 

    @Override 
    public class StepMasterActivity extends LifecycleActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_step_master); 
     // setToolbar(); 
     SharedViewModel sharedViewModel = ViewModelProviders.of(this).get(SharedViewModel.class); 
    } 
} 

但我注意到LifecycleActivity與AppCompatActivity無關,都不是FragmentActivity。

public class LifecycleActivity extends FragmentActivity implements LifecycleRegistryOwner { 
    private final LifecycleRegistry mRegistry = new LifecycleRegistry(this); 

    public LifecycleActivity() { 
    } 

    public LifecycleRegistry getLifecycle() { 
     return this.mRegistry; 
    } 
} 

我做錯了什麼?

回答

34

UPDATE 2017-10-05LifecycleActivity已被棄用。如果使用26.1.0或更高的support-fragmentappcompat-v7,則FragmentActivityAppCompatActivity都執行LifecycleOwner

最初的答案出現在歷史(也可能是歇斯底里)的目的下方。


報價the documentation

注意:由於架構的組件是處於alpha階段,片段和AppCompatActivity類無法實現它(因爲我們不能從一個穩定的組件添加依賴不穩定的API) 。在生命週期穩定之前,LifecycleActivity和LifecycleFragment類是爲了方便而提供的。生命週期項目發佈後,支持庫碎片和活動將實施LifecycleOwner界面; LifecycleActivity和LifecycleFragment當時將被棄用。

LifecycleActivityFragmentActivity連接,而不是AppCompatActivity

您應該能夠創建自己的AppCompatLifecycleActivity如下:

public class AppCompatLifecycleActivity extends AppCompatActivity implements LifecycleRegistryOwner { 

    private final LifecycleRegistry mRegistry = new LifecycleRegistry(this); 

    @Override 
    public LifecycleRegistry getLifecycle() { 
     return mRegistry; 
    } 
} 
+0

LifecycleRegistry就是這樣嗎?所以我可以創建自定義的「LifecycleRegistryOwner」,而不是使片段擴展LifecycleFragment? (現在) – alexpfx

+0

@alexpfx:正確。再次引用[文檔](https://developer.android.com/topic/libraries/architecture/lifecycle.html#implementing-lco):「任何自定義片段或活動都可以通過實現構建而轉化爲LifecycleOwner -in LifecycleRegistryOwner接口(而不是擴展LifecycleFragment或LifecycleActivity)。「 – CommonsWare

+0

@ superarts.org:我不明白這個問題有什麼關係,更不用說這個答案了。請提出一個單獨的問題,在哪裏提供[mcve]並更詳細地解釋您的問題。 – CommonsWare