我知道在android中已經有一些關於全局方法和變量的問題,但我遇到了靜態方法的問題,可能是由於我對面向對象編程的經驗不足。所以這裏是我想要的:在android中的所有活動中使用方法
我正在寫一個應用程序,計算用戶可以爲他做的某些事情賺取的積分。因此,我想從不同的活動和服務調用方法addPoints
。該方法還應該在主要活動和其他一些事情中設置點textview。
我通過在MainActivity中添加一個靜態變量
static int sPoints;
,我在每個活動的「全局」變量使用意識到這點。 但是,與addPoints
方法我有一些問題。如果我使用非靜態方法,則必須在其他活動中創建MainActivity的實例,這不太好,並且更改該實例的值不會影響實際的MainActivity。
如果我用它工作得很好,只要我不想使用像非靜態方法在這個例子中的靜態函數:
public static void addPoints(Context context, int points){
int levelBefore, levelAfter;
levelBefore = getLevelFromPoints(sPoints);
sPoints = sPoints + points;
levelAfter = getLevelFromPoints(sPoints);
if(levelBefore!=levelAfter){
String rank = getRankFromLevel(levelAfter);
levelTextView.setText("Lvl. " + String.valueOf(levelAfter));
Toast.makeText(context, "Congrats! You reached the next level!", Toast.LENGTH_LONG).show();
}
}
在這裏,我不能輕易使用levelTextView.setText和在許多其他情況下,我遇到了這個問題。此外,我讀過使用靜態方法不好,無論如何。
那麼正確的方法是每次創建一個MainActivity的實例,然後調用addPoints
它必須返回新的點數?還是有另一種方式(我希望如此,因爲上述兩種方式看起來都不太令人滿意)。
我看到一個參數'Context context'被傳遞,我確信你不知道它是已經運行的主要活動的實例。只需創建一個界面並調用它來更新文字瀏覽 –
您可以嘗試將該值放入共享首選項中,並在需要時進行查詢。 Android在後臺執行所有骯髒的工作,並且它不是非常昂貴。 –
嗨,你可以使用匕首的朋友。這裏是公共方法的例子,我不是靜態的請參閱https://github.com/saveendhiman/SampleApp/blob/master/app/src/main/java/com/sampleapp/utils/AppUtils.java – Saveen