我在將資料從課堂發送到活動時遇到問題。我有靜態方法的類(不是活動):
public static void printUsageStats(List<UsageStats> usageStatsList){
long totalTime = 0;
for (UsageStats u : usageStatsList) {
if ((u.getTotalTimeInForeground() > 0) && u.getPackageName().equals("com.facebook.katana")) {
Log.d(TAG, "Pkg: " u.getPackageName() "\t" "ForegroundTime: "
u.getTotalTimeInForeground());
totalTime = totalTime u.getTotalTimeInForeground();
}
}
System.out.println(totalTime);
}
我需要在單擊按鈕后將變數totalTime發送到 mainactivity 以使用此變數在 textview 上設定文本。
這是我在 mainactivity 中呼叫的第二種方法:
public static void printCurrentUsageStatus(Context context){
printUsageStats(getUsageStatsList(context));
}
在 onCreate mainactivity 我稱之為:
statsBtn = (Button) findViewById(R.id.stats_btn);
statsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UStats.printCurrentUsageStatus(MainActivity2.this);
}
});
但是這樣我就不能在 textview 中設定文本了。
uj5u.com熱心網友回復:
方法 1 - 回傳值
最直接的方法是只回傳要從方法中顯示的值,像這樣
// change return type from 'void' to 'long' and add a 'return'
public static long printUsageStats(List<UsageStats> usageStatsList){
// your existing code...
return totalTime;
}
public static long printCurrentUsageStatus(Context context){
return printUsageStats(getUsageStatsList(context));
}
然后您可以回傳時間值并將其設定在您的活動中
textFld = (TextView)findViewById(R.id.my_text);
statsBtn = (Button) findViewById(R.id.stats_btn);
statsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long time = UStats.printCurrentUsageStatus(MainActivity2.this);
textFld.setText(String.valueOf(time));
}
});
方法 2 - 將 TextView 作為引數傳遞
或者,您可以將 傳遞給TextView函式作為引數,然后您可以在靜態函式中設定值。
public static void printUsageStats(List<UsageStats> usageStatsList, TextView tv){
// your existing code...
tv.setText(String.valueOf(totalTime));
}
public static void printCurrentUsageStatus(Context context, TextView tv){
printUsageStats(getUsageStatsList(context), tv);
}
并這樣稱呼它
textFld = (TextView)findViewById(R.id.my_text);
statsBtn = (Button) findViewById(R.id.stats_btn);
statsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UStats.printCurrentUsageStatus(MainActivity2.this, textFld);
}
});
uj5u.com熱心網友回復:
至于當前的實作,您可以從 Activity 呼叫靜態方法并從該方法獲取回傳值,這是一種最簡單的方法。您也可以創建一個 DI (dagger/koin/hilt),使用 LiveData 創建一個存盤庫并從 Activity 訂閱此 LiveData 以獲得新值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457376.html
