2015-10-16 84 views
1

當我添加一個只支持擴展ActivityFragment類的類時,我發現它很困難,因爲我感興趣的特定類已經擴展了另一個LinearLayout類。爲了避免創建一個自定義按鈕,我做了以下的解決方法,用Java擴展多個類的替換

public class metaView extends LinearLayout { 
    private FragmentActivity fragmentActivity; 
    private void initViews() { 
     fragmentActivity = new FragmentActivity(){ 
      @Override 
      protected void onCreate(Bundle savedInstanceState){ 
        //Create Button Discovery... 

      } 
     }; 
    } 
} 

但是,它似乎並不像覆蓋方法的onCreate曾經被調用。有沒有人看到這個替代方案的問題?或者這只是不工作?

在此先感謝!

+1

我對Android生命週期並不熟悉,但它可能必須按照您的方法被調用的事件順序進行。例如,如果在調用initViews()之前訪問fragmentActivity變量,則該對象不會被創建,因此不會定義overriden方法。你嘗試過調試嗎? – ryuu9187

+0

感謝您的迴應!我應該說清楚了,但initViews在fragmentActivity之前被訪問。但即使不是,fragmentActivity在initViews之前不會被訪問,因爲它包含在方法中? – jensiepoo

+1

嗯,從技術上講,我不知道如何訪問fragmentActivity,或者調用onCreate()。但是,是的,如果它之前被訪問過,我會期待一個空引用ex。應該調用onCreate()什麼? – ryuu9187

回答

1

正如我加入鑄按鈕,只支持擴展ActivityFragment類

這並沒有任何意義的類。無論如何,你不能創建和使用匿名的Activity實例。你的佈局應該是可配置的,以顯示/隱藏按鈕,並提供一個界面來處理點擊按鈕。例如您MetaView類可以有這樣的事情:

public interface OnCastButtonClickedListener { 
    void onCastButtonClicked(); 
} 

public void setCastButtonEnabled(boolean enabled) { 
    // Turn it on or off 
} 

public void setOnCastButtonClickedListener(OnCastButtonClickedListener l) { 
    // Assign some listener to delegate the button click to. 
} 

然後,無論是活動使用的佈局成爲負責顯示/隱藏投放按鈕,以及處理click事件。

+0

我在看https://plus.google.com/+GoogleDevelopers/posts/ZHHe2tE7hcg你的解決方案肯定有效,這似乎是我試圖避免的第三種選擇(自定義按鈕)。 – jensiepoo

+1

檢查此實現 - 我認爲這是你想要的:https://github.com/googlecast/MediaRouter-Cast-Button-android/blob/master/src/com/example/mediarouter/MediaRouterActionBarButtonActivity.java – kcoppock

+0

謝謝你幫助!我實際上是看着這個https://github.com/googlecast/MediaRouter-Cast-Button-android/blob/master/src/com/example/mediarouter/MediaRouterButtonActivity.java但是,這仍然不能解決問題,但?因爲我的類已經擴展了LinearLayout類... – jensiepoo