如何在 Android 上将数据从 class 发送到 activity
How to send data from class to activity on Android
我在将数据从 class 发送到 activity 时遇到问题。我有 class(不是 activity)和静态方法:
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 中设置文本。
至于当前的实现,您可以从 Activity 调用静态方法并从此方法获取返回值,这是最简单的方法。您还可以制作一个 DI (dagger/koin/hilt),制作一个带有 LiveData 的存储库并从 Activity 订阅此 LiveData 以获得新值。
方法 1 - Return 值
最直接的方法就是 return 您想要从方法中显示的值,就像这样
// 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));
}
然后您可以 return 时间值并将其设置在您的 activity
内
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);
}
});
我在将数据从 class 发送到 activity 时遇到问题。我有 class(不是 activity)和静态方法:
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 中设置文本。
至于当前的实现,您可以从 Activity 调用静态方法并从此方法获取返回值,这是最简单的方法。您还可以制作一个 DI (dagger/koin/hilt),制作一个带有 LiveData 的存储库并从 Activity 订阅此 LiveData 以获得新值。
方法 1 - Return 值
最直接的方法就是 return 您想要从方法中显示的值,就像这样
// 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));
}
然后您可以 return 时间值并将其设置在您的 activity
内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);
}
});