2011-09-07 51 views
0

我想在創建活動之前或至少在啓動之前設置一個「選項」。如果有通過AndroidManifest執行此操作的方法?考慮下面這個例子,我們有一個在使用的onCreate實例化一個對象(不完全OO爲簡潔起見)全球配置類Android:如何在調用onCreate之前設置靜態值

public class Global { 
    public static boolean visible = false; 
}
public class MyActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // here is where we want the most up-to-date value of visible 
     MyObject obj = new MyObject(Global.visible); 
    } 
}

顯然,在這種情況下,「可見」將是「錯誤的」。如果這是某種API庫,我們希望爲用戶提供將「可見」設置爲「真」的選項。

更新1

的目標是在預編譯庫中的全局類和有它的價值,利用庫中的開發人員設置。我正在尋找開發人員在創建應用程序時執行此操作的最簡單方法;我認爲清單可能是要走的路,但我不知道如何通過xml注入「可見」的值。以下使用偏好的答案很好,但僅涵蓋用戶的觀點。

更新2 恕我直言,使用資源在這裏效果最好。

<bool name="visible">true</bool>
public class MyActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // here is where we want the most up-to-date value of visible 
     Resource res = getResource(); 
     MyObject obj = new MyObject(res.getBoolean(R.bool.visible)); 
    } 
}
+0

不使用已編譯默認類'全局',但更新的答案與開發人員更新的方式(無需修改'MyActivity'中的引用 – CrackerJack9

回答

1

我認爲使用SharedPreferences會做你正在尋找的,使用Global.visible作爲默認值。然後如果用戶將其更改爲true,它將使用該值。

boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
    "MyVisiblePreference", 
    Global.visible); 
MyObject obj = new MyObject(makeVisible); 

爲了讓偏好是無需重新編譯或設置(通過偏好活動)更新,您可以從resources加載預設的偏好:

<bool name="MyVisiblePreference">true</bool> 

而且同樣引用它與:

boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
    "MyVisiblePreference", 
    getResources().getBoolean(R.bool.MyVisiblePreference)); 

如果開發者沒有將首選項設置爲false,它將默認爲true(基於resources值)。

+0

對我來說使用Resource文件是最好的解決方案,所以你的回答肯定會使我朝這個方向發展。 –

0

對於簡單的對象,你可以這樣創建它們:(根據關你的代碼示例)

public static boolean visible = false; 

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // here is where we want the most up-to-date value of visible 
     MyObject obj = new MyObject(Global.visible); 
    } 
} 

對於更復雜的對象,你可以用static initializer這樣的初始化:

public static boolean visible; 

static { 
    visible = false; 
} 

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // here is where we want the most up-to-date value of visible 
     MyObject obj = new MyObject(Global.visible); 
    } 
} 
+0

這是一個開發人員的選項,但它需要他們重新編譯/修改它們源碼 –

0

你可以子類android.app.Application,這個類有方法onCreate,您可以覆蓋。您的子類必須在AndroidManifest.xml<application name="YourApplication">中定義。在創建應用程序中的所有其他組件之前(在任何ActivityService之前)調用應用程序的onCreate

+0

有趣的是,你有沒有例子說明如何通過xml注入重寫類的值? –

相關問題