我有一些游戏的“主要”活动,我创建了一个类,包括将在各种主要活动中使用的所有方法。
一种方法是:
public void printMessage(String message, int time)
{
Toast toastMessage = Toast.makeText(this, "", Toast.LENGTH_SHORT);
toastMessage.setText(message);
toastMessage.setDuration(time);
toastMessage.show();
}
显然,这个方法要求类扩展Activity,所以我猜这就是问题。
我读到了关于使用Intent和putExtra,getExtra ......但在这种情况下这将是一种过度杀伤力。 我知道这个printMessage并不能证明一个新类的合理性,但是我有更多的方法可以做,那些也需要Activity。
我必须提一下,我是Android的新手,也是Java新手。现在我已经习惯了Java创建对象的方法,然后用该对象进行方法调用。这就是我在这里尝试的方式,但它只适用于“常规类”,而不适用于活动类。
谢谢。
答案 0 :(得分:4)
该类不需要扩展Activity,只需通过添加一个额外的参数将调用Activity的Context传递给printMessage方法......
public void printMessage(Context context, String message, int time) {
Toast toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
...
}
编辑:回复您的评论......
据我所知,你创建了一个'helper'类,它不是Android特有的,但需要使用Android元素(例如Context of Activities,SharedPreferences等)。在很多情况下,这些东西可以按照我上面演示的方式传递给助手类的各种方法(没有问题)。
它确实有效,但不幸的是,现在我收到太多的ToastMessages。
好的,显然它是在之前的Toast超时之前被重复调用的。尝试将'toastMessage'作为助手类的实例成员......
public class MyHelper {
Toast toastMessage = null;
public void printMessage(Context context, String message, int time) {
if (toastMessage != null)
toastMessage.cancel();
toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
...
}
}
不幸的是,getSharedPreferences()确实需要Activity,或者至少需要我调用它的方式。
同样,你的'helper'类的任何方法都可以传递给任何调用它们的Activity的Context
,这可以用来获取首选项等。
或者,如FvZ所述,您可以扩展Application类并提供对应用程序范围的共享首选项的访问...
public class MyApp extends Application {
protected static SharedPreferences UserPrefs = null;
@Override
public void onCreate() {
super.onCreate();
UserPrefs = getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
}
}
所有活动都可以简单地使用(例如)......
MyApp.UserPrefs.putString(...);
在这种情况下,您还可以将助手类创建为应用程序的静态成员,使其可以从所有活动中访问。
是否有更简单的方法来使用类似于常规Java的方法?
要掌握的一件事是Android确实使用'常规'Java ...就像Android Activity类这样的东西是一个非常特殊的情况。当一个活动涵盖另一个活动时,您无法保证第一个活动将保持多久。在许多情况下,它会很快被销毁 - 因此,您不能依赖于能够从一个Activity中调用另一个Activity中的方法。它也不是Android的工作方式。
答案 1 :(得分:0)
另一种方法是扩展您的应用程序,它将为您提供一个将持久存储到所有应用程序的对象,然后您可以将指向您的活动的指针传递给您需要的所有其他活动